CINXE.COM
main@lists.cncf.io | Home
<!DOCTYPE html> <html lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="pinterest" content="nopin" /> <meta name="pinterest" content="nohover" /> <meta name="3778517eb4810dfb5d143ed8f1b359b3b5a82923" content="0f56257c3db4a222e91b11bc6871c4df2e263b28" /> <link rel="apple-touch-icon" sizes="57x57" href="/img/org.10/favicons/apple-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="/img/org.10/favicons/apple-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="/img/org.10/favicons/apple-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="/img/org.10/favicons/apple-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="/img/org.10/favicons/apple-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="/img/org.10/favicons/apple-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="/img/org.10/favicons/apple-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/img/org.10/favicons/apple-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/img/org.10/favicons/apple-icon-180x180.png"> <link rel="icon" type="image/png" sizes="192x192" href="/img/org.10/favicons/android-icon-192x192.png"> <link rel="icon" type="image/png" sizes="32x32" href="/img/org.10/favicons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="96x96" href="/img/org.10/favicons/favicon-96x96.png"> <link rel="icon" type="image/png" sizes="16x16" href="/img/org.10/favicons/favicon-16x16.png"> <link rel="manifest" href="/img/org.10/favicons/manifest.json"> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="/ms-icon-144x144.png"> <script> /* stubs */ const hapticsImpactHeavy = async () => { }; const hapticsImpactMedium = async () => { }; const hapticsImpactLight = async () => { }; const hapticsVibrate = async () => { }; const hapticsSelectionStart = async () => { }; const hapticsSelectionChanged = async () => { }; const hapticsSelectionEnd = async () => { }; </script> <script> function setPullToRefresh() {} function gotoURL(inurl) { window.location.href = inurl; return; } function contentLoaded(isHTMX, f, caller = "") { console.log("contentLoaded: " + isHTMX + " " + caller); if (isHTMX == true) { document.body.addEventListener('htmx:afterSettle', f, {once: true}); } else { if (document.readyState !== 'loading') { console.log('document is already ready, just execute code here'); f(); } else { console.log('document was not ready, place code here'); document.addEventListener('DOMContentLoaded', f, {once: true}); } } } function HideAppSidebarOnKeyboard() { console.log("In HideAppSidebarOnKeyboard"); } // stub function logError(data, url, linenumber) { console.log(data) return; } var pushSubToken; var ignoreErrors = false; var lastError = ""; window.onerror = function(errorMessage, errorUrl, errorLine, errorColumn, errorObj) { let column; let stack; if (console && console.log) { console.log("msg:", errorMessage); console.log("url:", errorUrl); console.log("line:", errorLine); if (errorColumn !== undefined && errorObj != null) { console.log("column:", errorColumn); column = errorColumn; } if (errorObj !== undefined && errorObj != null) { console.log("stack:", errorObj.stack); stack = errorObj.stack; } console.log("client_id:", "web.web08.6516819.1732408398659228162"); console.log("last_error:", lastError); console.log("stack:", stack); } if (errorUrl == "" || errorUrl === null) { errorUrl = window.location.href; } if (errorMessage.includes("SecurityError:") == true) { ignoreErrors = true; } if (ignoreErrors == true) { console.log("cookies, disabled, ignoring"); lastError = errorMessage; return; } jQuery.ajax({ type: 'POST', url: '/jsclienterror', data: { msg: errorMessage, url: errorUrl, line: errorLine, column: column, stack: stack, last_error: lastError, client_id: "web.web08.6516819.1732408398659228162" }, success: function() { if (console && console.log) { console.log('JS error report successful.'); } lastError = errorMessage; }, error: function() { if (console && console.error) { console.error('JS error report submission failed!'); } lastError = errorMessage; } }); return true; } </script> <script src="/tinymce-5.10.9/tinymce.min.js"></script> <script src="/js/browser-image-compression-2.0.2.min.js"></script> <link href="/css/application-6630163a3be19b6cee26ce35342d0d92.css" rel="stylesheet" id="groupsio-css"> <script src="/js/application-9b2c27b802a13063cf8a712fe566f004.js" id="groupsio-js"></script> <script src="/js/run_prettify.js"></script> <title> main@lists.cncf.io | Home </title> <link rel="alternate" type="application/rss+xml" title="RSS Feed for main" href="https://lists.cncf.io/g/main/rss" /> <meta property="og:url" content="https://lists.cncf.io/g/main" /> <meta property="og:type" content="website" /> <meta property="og:title" content="main lists.cncf.io Group" /> <meta property="og:description" content="CNCF is an open source software foundation dedicated to making cloud native computing universal and sustainable. Cloud native computing uses an open source software stack to deploy applications as microservices, packaging each part into its own container, and dynamically orchestrating those containers to optimize resource utilization. Cloud native technologies enable software developers to build great products faster. * If you are interested in becoming a CNCF member, please visit https://www.cncf.io/about/join/ * If you are interested in participating in our Technical Oversight Committee, please visit https://github.com/cncf/toc * If you are interested in learning more about CNCF-hosted projects, please visit https://www.cncf.io/projects/" /> <meta property="og:image" content="https://groups.io/img/org.10/logofull.png" /> <script> htmx.config.scrollBehavior = "instant"; htmx.config.historyCacheSize = 0; htmx.config.defaultSettleDelay = 0; console.log("FULL PAGE LOAD"); </script> </head> <body id="body" class="" hx-headers='{"Accept-Version": "58f989bb651da14c2b1295c4c0447aef4773d1f9"}' hx-ext="preload" hx-boost="false"> <script> if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { document.body.classList.add('dark-mode'); } </script> <div class="navbar navbar-head navbar-fixed-top" role="navigation" id="headerbar"> <div class="container-fluid" style="padding-left:0px;"> <a href="https://lists.cncf.io" class="navbar-left" hx-boost="false" hx-disinherit="*"> <img src="https://lists.cncf.io/img/org.10/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a> <ul class="nav navbar-nav pull-right visible-xs" style="margin-top:5px;margin-bottom:5px;"> <li> <a href="#" data-toggle="modal" data-target="#mobileAccount"> <i class="fa-fw fa fa-bars fa-lg"></i> </a> </li> </ul> <ul class="nav navbar-nav pull-right hidden-xs"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://lists.cncf.io/unsetlang"> EN </a> </li> <li> <a href="https://lists.cncf.io/setlang/de"> DE </a> </li> <li> <a href="https://lists.cncf.io/setlang/es"> ES </a> </li> <li> <a href="https://lists.cncf.io/setlang/fr"> FR </a> </li> <li> <a href="https://lists.cncf.io/setlang/it"> IT </a> </li> <li> <a href="https://lists.cncf.io/setlang/pt"> PT </a> </li> <li> <a href="https://lists.cncf.io/setlang/uk"> UK </a> </li> </ul> </li> <li> <a href="https://lists.cncf.io/helpcenter" target="_blank"> Help </a> </li> <li> <a href="https://lists.cncf.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> </ul> </div> </div> <div class="modal fade" id="mobileAccount" role="dialog"> <div class="modal-dialog" style="margin-top:50px;"> <div class="modal-content"> <div class="modal-body"> <ul class="list-group noborderlist"> <li class="noborderitem list-group-item"> <a href="https://lists.cncf.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> <li class="noborderitem list-group-item"> <a href="https://lists.cncf.io/helpcenter" target="_blank"> <i class="fa-fw fa fa-question-circle"></i> Help </a> </li> <li class="dropdown noborderitem list-group-item"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://lists.cncf.io/unsetlang"> EN </a> </li> <li> <a href="https://lists.cncf.io/setlang/de"> DE </a> </li> <li> <a href="https://lists.cncf.io/setlang/es"> ES </a> </li> <li> <a href="https://lists.cncf.io/setlang/fr"> FR </a> </li> <li> <a href="https://lists.cncf.io/setlang/it"> IT </a> </li> <li> <a href="https://lists.cncf.io/setlang/pt"> PT </a> </li> <li> <a href="https://lists.cncf.io/setlang/uk"> UK </a> </li> </ul> </li> </ul> </div> </div> </div> </div> <script> var groupnavigatorData = [ ]; </script> <!-- Modal Dialog for Autocomplete --> <div class="modal fade" id="groupnavigatorModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <input type="text" class="form-control" id="groupnavigatorInput" placeholder="Go to group..." style="margin-bottom:10px"> <div id="groupnavigatorContainer" class="autocompleteResults" style="max-height:250px; overflow-y: auto;"></div> <div class="text-center" style="margin-top:10px; font-size:12px;"><i class="fa-sharp fa-arrow-up-arrow-down"></i> to navigate <i class="fa-sharp fa-arrow-turn-down-left"></i> to use <strong>esc</strong> to dismiss</div> </div> </div> </div> </div> <script> // Keep track of the currently selected index var selectedIndex = -1; // Function to highlight the matched substring function highlightSubstring(str, substring) { var index = str.toLowerCase().indexOf(substring.toLowerCase()); if (index !== -1) { var before = str.substring(0, index); var middle = str.substring(index, index + substring.length); var after = str.substring(index + substring.length); return before + '<span class="autocomplete-highlight">' + middle + '</span>' + after; } return str; } // Function to highlight the selected item and ensure it is visible in the scrollable list function highlightSelectedItem(modalName) { var listContainer = document.getElementById(modalName + 'Container'); var items = document.getElementsByClassName(modalName + '-list-item'); Array.from(items).forEach(function(item, idx) { item.className = idx === selectedIndex ? modalName + '-list-item autocomplete-list-item btn-primary no-hover' : modalName + '-list-item autocomplete-list-item no-hover'; // Apply btn-primary class to the selected item }); if (items.length > 0 && selectedIndex >= 0) { var selectedItem = items[selectedIndex]; var containerTop = listContainer.scrollTop; var containerBottom = containerTop + listContainer.clientHeight; var itemTop = selectedItem.offsetTop; var itemBottom = itemTop + selectedItem.offsetHeight; const fudge = 59; if (selectedIndex > 0 && itemTop > containerBottom) { // If there are items below the selected item and the selected item is not fully visible, scroll down listContainer.scrollTop = itemTop - listContainer.clientHeight + items[selectedIndex - 1].offsetHeight; } else if (selectedIndex < items.length - 1 && (itemTop - fudge) < containerTop) { // If there are items above the selected item and the selected item is not fully visible, scroll up listContainer.scrollTop = itemTop - fudge - items[selectedIndex + 1].offsetHeight; } } } // function to populate the list based on the input function populateList(modalName, data) { var input = document.getElementById(modalName+'Input').value; var listContainer = document.getElementById(modalName+'Container'); listContainer.innerHTML = ''; data.forEach(function(item) { if (item.name.toLowerCase().includes(input.toLowerCase())) { var div = document.createElement('div'); div.innerHTML = highlightSubstring(item.name, input); div.className = modalName+'-list-item autocomplete-list-item no-hover'; // Apply no-hover class div.addEventListener('click', function() { // Navigate to the specified URL when a list item is clicked window.location.href = item.url; }); div.addEventListener('mousemove', function() { // Remove no-hover class from all items when the mouse is moved over any item console.log("mouse move"); var items = document.getElementsByClassName(modalName+'-list-item'); Array.from(items).forEach(function(item) { item.classList.remove('no-hover'); }); }); listContainer.appendChild(div); } }); highlightSelectedItem(modalName); } function InitAutocomplete(modalName, data) { // Focus the input field when the modal is shown and populate the list $('#' + modalName + 'Modal').on('shown.bs.modal', function () { $('#' + modalName + 'Input').focus().val(''); populateList(modalName, data); selectedIndex = 0; highlightSelectedItem(modalName); }); // Event listener for input field typing document.getElementById(modalName + 'Input').addEventListener('input', function() { populateList(modalName, data); selectedIndex = 0; }); // Event listener for arrow keys and enter key document.getElementById(modalName + 'Input').addEventListener('keydown', function(event) { var items = document.getElementsByClassName(modalName + '-list-item'); if (event.key === 'ArrowDown') { event.preventDefault(); if (selectedIndex < items.length - 1) selectedIndex++; highlightSelectedItem(modalName); } else if (event.key === 'ArrowUp') { event.preventDefault(); if (selectedIndex > 0) selectedIndex--; highlightSelectedItem(modalName); } else if (event.key === 'Enter' && selectedIndex >= 0 && selectedIndex < items.length) { event.preventDefault(); items[selectedIndex].click(); } }); } function showAutocompleteModal(modalName) { $('#' + modalName + 'Modal').modal('show'); selectedIndex = -1; } </script> <div id="content" class="container-fluid"> <script> InitAutocomplete("groupnavigator", groupnavigatorData); document.body.addEventListener("showReloadPageDialog", function(evt) { console.log("Forced reload"); location.reload(); }); function ShowBackButton(label) { var logoElement = document.getElementById("logo"); if (logoElement) { html = ` <span style="color:#fff;margin-top:14px;margin-left:12px;float:left !important; height:36px;"> <a onclick="goBack()" style="color:#fff"> <i class="fa-fw fa-solid fa-chevron-left fa-lg"></i> </a></span>`; if (label != "") { html += `<div style="position:absolute;left:50%;transform:translateX(-50%);text-align:center;color:#ecf0f1;margin-top:5px;"><h4>` + label + `</h4></div>`; } logoElement.innerHTML = html; } } function HideBackButton() { var logoElement = document.getElementById("logo"); if (logoElement) { logoElement.innerHTML = ` <a href="https://lists.cncf.io" class="navbar-left"> <img src="https://lists.cncf.io/img/org.10/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a>`; } } function goBack() { history.back(); } // submitEvent acts like .submit(), except it is compatible with the app, by using events instead. function submitEvent(ele) { console.log("in submitEvent"); if (ele.startsWith('#')) { ele = ele.slice(1); } document.getElementById(ele).submit(); return; /* const theEvent = new CustomEvent('submit', { bubbles: true, cancelable: true }); if (typeof ele === 'string' || ele instanceof String) { if (ele.startsWith("#") == true) { ele = ele.slice(1); } if (document.getElementById(ele).dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); document.getElementById(ele).submit(); } return; } // assume ele is the element if (ele.dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); ele.submit(); } */ } // gioDestroy is a convenience function for destroy callbacks function gioDestroy(eventCB) { let internalGioDestroy = function(evt) { // do not activate on infinite scroll events if (evt.detail.target !== undefined && evt.detail.target.id != "maincontent-refresh") { console.log("Ignoring infinite scroll event"); return; } console.log("Calling destroy callback"); eventCB(evt); } document.body.addEventListener("htmx:beforeSwap", internalGioDestroy, {once: true}); document.body.addEventListener("htmx:historyCacheMiss", internalGioDestroy, {once: true}); } var drawerCloseFunc = function(evt) { console.log("in drawerCloseFunc"); // Find all elements with the class 'drawer' var drawers = document.querySelectorAll('.drawer'); // Iterate over each element and call closeDrawer() on each drawers.forEach(function(obj) { drawerObj.closeDrawer(obj); }); $('.modal').modal('hide'); } document.body.addEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.addEventListener('htmx:historyCacheMiss', drawerCloseFunc); var keydownFunc = function(event) { var tagName = event.target.tagName.toLowerCase(); if (tagName === 'input' || tagName === 'textarea' || event.target.isContentEditable) { if (event.key === 'Escape') { event.target.blur(); } return; } // check if the viewimages viewer is up let element = document.getElementById('overlay'); if (element && element.classList.contains('visible')) { return; } console.log("HERE: " + event.key + " " + event.ctrlKey + " " + event.shiftKey + " " + event.metaKey); if (event.ctrlKey && event.shiftKey && (event.key === '?' || event.key === '/')) { event.preventDefault(); // Prevent the default action // Show the modal dialog for keyboard shortcuts $('#shortcutModal').modal('show'); return; } $('#shortcutModal').modal('hide'); if (event.key.toLowerCase() === 'g') { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); showAutocompleteModal("groupnavigator"); return; } } // Check if the pressed key is '/' if ((event.key === 'f' || event.key === 'F') && event.shiftKey) { if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { if (event.metaKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } else { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } } } document.addEventListener('keydown', keydownFunc); var removeDrawerCloseFunc = function(evt) { document.body.removeEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.removeEventListener('htmx:historyCacheMiss', drawerCloseFunc); document.removeEventListener('keydown', keydownFunc); } document.body.addEventListener("htmx:historyCacheMiss", removeDrawerCloseFunc, {once: true}); </script> <!-- Modal Dialog for Keyboard Shortcuts --> <div class="modal fade" id="shortcutModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="myModalLabel">Keyboard Shortcuts</h4> </div> <div class="modal-body"> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>shift</strong> + <strong>?</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Show all keyboard shortcuts</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>g</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Navigate to a group</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>shift</strong> + <strong>f</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Find</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>/</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Quick actions</div> </div> </div> <div class="text-center" style="margin-top:10px; margin-bottom:10px; font-size:12px;"><strong>esc</strong> to dismiss</div> </div> </div> </div> <div id="mainrow" class="row" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div id="groupsidebar" class="scrollbar hidden-print"> <div class="scrollbar-content"> <div id="accordion" role="tablist" aria-multiselectable="true" style="margin-bottom:20px;"> <div class="list-group noborderlist" style="border:0;margin-bottom:0px"> <a title="Group Home" href="https://lists.cncf.io/g/main" class="list-group-item sidebar-item"> <i class="fa-fw fa fa-home fa-lg"></i> Home </a> <a title="Messages" href="https://lists.cncf.io/g/main/topics?sidebar=true" id="sidebar-archives" class="noborderitem list-group-item sidebar-item sidebar-item-archives"> <i class="fa-fw fa fa-comments fa-lg"></i> Messages <span id="sidebar-archives-badge" class="badge"></span> </a> <a title="Hashtags" href="https://lists.cncf.io/g/main/hashtags" id="sidebar-hashtags" class="noborderitem list-group-item sidebar-item sidebar-item-hashtags"> <i class="fa-fw fa fa-hashtag fa-lg"></i> Hashtags <span id="sidebar-hashtags-badge" class="badge"></span> </a> <a title="Subgroups" href="https://lists.cncf.io/g/main/subgroups" id="sidebar-subgroups" class="noborderitem list-group-item sidebar-item sidebar-item-subgroups"> <i class="fa-fw fa fa-chart-pie fa-lg"></i> Subgroups <span id="sidebar-subgroups-badge" class="badge"></span> </a> </div> </div> <div class="text-center" style="font-size:13px;margin-bottom:30px"> <div style="padding-bottom:10px;"> <strong>ctrl</strong> + <strong>shift</strong> + <strong>?</strong> for shortcuts </div> <div style="padding-bottom:5px;"> <a href="https://groups.io/static/about"> About </a> · <a href="https://groups.io/static/features"> Features </a> · <a href="https://groups.io/static/pricing"> Pricing </a> </div> <div style="padding-bottom:5px;"> <a rel="nofollow" href="https://groups.io/g/updates/messages?expanded=1"> Updates </a> · <a href="https://groups.io/static/tos"> Terms </a> · <a href="https://groups.io/helpcenter" target="_blank"> Help </a> </div> <div style="padding-bottom:5px;"> © 2024 Groups.io </div> </div> </div> </div> <div id="maincontent" class="groupmaincontent"> <div id="maincontent-refresh"> <div id="maincontent-column" class="col-xs-12 maincontent-column"> <script> contentLoaded(false, function() { function set_body_height() { var wh = $(window).height(); $('body').attr('style', 'height:' + wh + 'px;'); } set_body_height(); $(window).bind('resize', function() { set_body_height(); }); }); </script> <div id="alertdiv"></div> <div class="noticetemplate template"> <div class="alert alert-success alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true"> × </span> </button> <span class="flashmsg"></span> </div> </div> <div class="alerttemplate template"> <div class="alert alert-danger alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true"> × </span> </button> <span class="flashmsg"></span> </div> </div> <div class="alertnoclosetemplate template"> <div class="alert alert-danger" role="alert"> <span class="flashmsg"></span> </div> </div> <script> function dismiss() { console.log("dismiss"); $.get( "/dismissalert"); } var $alerttemplate = $(".alerttemplate"); var $alertnoclosetemplate = $(".alertnoclosetemplate"); var $noticetemplate = $(".noticetemplate"); function createAlert(msg, isError, autoClose, noClose) { if (isError == false) { $newPanel = $noticetemplate.clone(); } else { if (noClose) { $newPanel = $alertnoclosetemplate.clone(); } else { $newPanel = $alerttemplate.clone(); } } $newPanel.find(".flashmsg").html(msg); if (autoClose == true) { $("#alertdiv").append($newPanel.fadeTo(2000, 500).slideUp(500, function(){ $newPanel.slideUp(500); $newPanel.remove(); })); } else { $("#alertdiv").append($newPanel.fadeIn()); } return $newPanel; } </script> <div class="row"> <div class="col-md-12"> <img src="https://lists.cncf.io/g/main/coverphoto" class="grouphome-center grouphome-fit"> </div> </div> <h3> Cloud Native Computing Foundation <small> main@lists.cncf.io </small> </h3> <div class="user-content"> CNCF is an open source software foundation dedicated to making cloud native computing universal and sustainable. Cloud native computing uses an open source software stack to deploy applications as microservices, packaging each part into its own container, and dynamically orchestrating those containers to optimize resource utilization. Cloud native technologies enable software developers to build great products faster.<br/><br/> <ul> <li>If you are interested in becoming a CNCF member, please visit聽<a href="https://www.cncf.io/about/join/" rel="nofollow">https://www.cncf.io/about/join/</a></li> <li>If you are interested in participating in our Technical Oversight Committee, please visit聽<a href="https://github.com/cncf/toc" rel="nofollow">https://github.com/cncf/toc</a></li> <li>If you are interested in learning more about CNCF-hosted projects, please visit聽<a href="https://www.cncf.io/projects/" rel="nofollow">https://www.cncf.io/projects/</a></li> </ul> </div> <div class="row"> <div class="col-md-6"> <h4> Group Information </h4> <ul class="list-unstyled"> <li> <i class="fa-fw fa fa-home"></i> <a href="https://www.cncf.io"> https://www.cncf.io </a> </li> <li> <i class="fa-fw fa fa-users"></i> 16,611 Members </li> <li> <i class="fa-fw fa fa-clock"></i> Started on <script id="timedispcreated9914"> $('#timedispcreated9914').replaceWith(DisplayShortTime(1514307746994059876, false )); </script> </li> <li> <i class="fa-fw fa fa-rss-square"></i> <a hx-disable href="https://lists.cncf.io/g/main/rss"> RSS Feed </a> </li> </ul> <h4> Group Email Addresses </h4> <ul class="list-unstyled"> <li> Post: <a href="mailto:main@lists.cncf.io"> main@lists.cncf.io </a> </li> <li> Subscribe: <a href="mailto:main+subscribe@lists.cncf.io"> main+subscribe@lists.cncf.io </a> </li> <li> Unsubscribe: <a href="mailto:main+unsubscribe@lists.cncf.io"> main+unsubscribe@lists.cncf.io </a> </li> <li> Group Owner: <a href="mailto:main+owner@lists.cncf.io"> main+owner@lists.cncf.io </a> </li> <li> Help: <a href="mailto:main+help@lists.cncf.io"> main+help@lists.cncf.io </a> </li> </ul> </div> <div class="col-md-6"> <h4> Group Settings </h4> <ul class="list-unstyled"> <li> <i class="fa-fw fa fa-bullhorn"></i> Only moderators can post to the group. </li> <li> <i class="fa-fw fa fa-check"></i> Posts to this group require approval from the moderators. </li> <li> <i class="fa-fw fa fa-check"></i> Posts from new users require approval from the moderators. </li> <li> <i class="fa-fw fa fa-reply"></i> Messages are set to reply to sender. </li> <li> <i class="fa-fw fa fa-lock"></i> Subscriptions to this group do not require approval from the moderators. </li> <li> <i class="fa-fw fa fa-folder-open"></i> Archive is visible to anyone. </li> <li> <i class="fa-fw fa fa-book"></i> Wiki is visible to members only. </li> <li> <i class="fa-fw fa fa-ban"></i> Members can edit their messages. </li> <li> <i class="fa-fw fa fa-ban"></i> Members can set their subscriptions to no email. </li> </ul> </div> </div> <div class="row"> <div class="col-md-6"> <h4> Top Hashtags <small> <a href="https://lists.cncf.io/g/main/hashtags"> [See All] </a> </small> </h4> No used hashtags. </div> </div> <p> <form role="form" class="form-horizontal" method="POST" action="https://lists.cncf.io/g/main/join" hx-boost="false" hx-disinherit="*"> <input type="hidden" name="group_id" value="9914"> <input type="hidden" name="type" value="register"> <button class="btn btn-primary btn-sm"> <i class="fa fa-plus"></i> Join This Group </button> or <a class="btn btn-success btn-sm" href="/login?group_id=9914&r=https%3A%2F%2Flists.cncf.io%2Fg%2Fmain" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In If You Are Already A Member </a> </form> </p> </div> </div> </div> </div> <div class="row hidden-print" id="mobileSidebar" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div id="mobileSidebarSub" class="col-xs-12 hidden-md hidden-lg"> <div class="navbar navbar-default navbar-fixed-bottom"> <div class="container" style="display: flex; justify-content: space-around;"> <div id="mobilesidebar-archives" class="mobilesidebar-item" style="margin-top:10px; padding-bottom:20px; flex: 1; text-align: center;" hx-get="https://lists.cncf.io/g/main/topics?sidebar=true" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="display: inline-block; position: relative;"> <div style="position: relative;display: inline-block;"> <i class="fa-fw fa-light fa-comments fa-2x"></i> </div><br> <span style="font-size:12px;">Messages</span> </div> </div> <div style="flex: 1; text-align: center;margin-top:10px" data-drawer-trigger aria-controls="drawer-name" aria-expanded="false"> <i class="fa-fw fa-light fa-bars fa-2x"></i><br> <span style="font-size:12px;">More</span> </div> </div> </div> <section class="drawer drawer-left" id="drawer-name" data-drawer-target> <div class="drawer-overlay" data-drawer-close tabindex="-1"></div> <div class="drawer-wrapper drawer-wrapper-top"> <div class="drawer-header"> <div class="drawer-title"> <i class="fa-fw fa-regular fa-bars fa-3x"></i> <span class="sr-only"> More Options </span> More </div> <button class="drawer-close" data-drawer-close aria-label="Close Drawer"></button> </div> <div class="drawer-content"> <div class="list-group noborderlist"> <a title="Group Home" href="https://lists.cncf.io/g/main" class="list-group-item sidebar-item"> <i class="fa-fw fa fa-home fa-lg"></i> Home </a> <a title="Messages" href="https://lists.cncf.io/g/main/topics?sidebar=true" id="sidebar-archives-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-archives"> <i class="fa-fw fa fa-comments fa-lg"></i> Messages <span id="sidebar-archives-mobile-badge" class="badge"></span> </a> <a title="Hashtags" href="https://lists.cncf.io/g/main/hashtags" id="sidebar-hashtags-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-hashtags"> <i class="fa-fw fa fa-hashtag fa-lg"></i> Hashtags <span id="sidebar-hashtags-mobile-badge" class="badge"></span> </a> <a title="Subgroups" href="https://lists.cncf.io/g/main/subgroups" id="sidebar-subgroups-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-subgroups"> <i class="fa-fw fa fa-chart-pie fa-lg"></i> Subgroups <span id="sidebar-subgroups-mobile-badge" class="badge"></span> </a> <a class="noborderitem list-group-item sidebar-item" href="https://groups.io/static/tos" target="_blank"> <i class="fa-fw fal fa-newspaper fa-lg"></i> Terms </a> </div> </div> </div> </section> </div> </div> <!-- Modal Dialog for Autocomplete --> <div class="modal fade" id="quickActionsModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <input type="text" class="form-control" id="quickActionsInput" placeholder="Go to page..." style="margin-bottom:10px"> <div id="quickActionsContainer" class="autocompleteResults" style="max-height:250px; overflow-y: auto;"></div> <div class="text-center" style="margin-top:10px; font-size:12px;"><i class="fa-sharp fa-arrow-up-arrow-down"></i> to navigate <i class="fa-sharp fa-arrow-turn-down-left"></i> to use <strong>esc</strong> to dismiss</div> </div> </div> </div> </div> <script> var quickActionsData = [ {name: "Group Home", url: "https://lists.cncf.io/g/main"}, {name: "Topics", url: "https://lists.cncf.io/g/main/topics"}, {name: "Messages", url: "https://lists.cncf.io/g/main/messages"}, {name: "Expanded Messages", url: "https://lists.cncf.io/g/main/messages?expanded=1"}, {name: "Polls", url: "https://lists.cncf.io/g/main/polls"}, {name: "Hashtags", url: "https://lists.cncf.io/g/main/hashtags"}, {name: "Subgroups", url: "https://lists.cncf.io/g/main/subgroups"}, /* other pages */ {name: "Help", url: "/helpcenter"}, {name: "Feed", url: "/feed"}, {name: "Your Groups", url: "/groups"}, {name: "Your Calendar", url: "/calendar"}, {name: "Your Activity", url: "/activity"}, {name: "Your Pending Messages", url: "/pendingmsgs"}, {name: "Account Login", url: "/account"}, {name: "Account Preferences", url: "/account?page=prefs"}, {name: "Account Security", url: "/account?page=security"}, {name: "Account Identity", url: "/account?page=profile&member_info_id=0"}, {name: "Account Notifications", url: "/account?page=notifications"}, {name: "Account Other Services", url: "/account?page=oauth"}, {name: "Account Bounces", url: "/account?page=bounces"}, {name: "Account Billing", url: "/account?page=billing"}, {name: "Find a Group", url: "/search?p=SubsCount,,,20,2,0,0"}, ]; InitAutocomplete("quickActions", quickActionsData); document.addEventListener('keydown', function(event) { var tagName = event.target.tagName.toLowerCase(); if (tagName === 'input' || tagName === 'textarea' || event.target.isContentEditable) { return; } // check if the viewimages viewer is up let element = document.getElementById('overlay'); if (element && element.classList.contains('visible')) { return; } if (event.key.toLowerCase() === '/') { if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { // For Mac // Check if Command (event.metaKey) is pressed, and either Option (event.altKey) is pressed or not if (event.metaKey) { event.preventDefault(); showAutocompleteModal("quickActions"); return; } } else { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); showAutocompleteModal("quickActions"); return; } } } }); function UpdateSidebar(id) { console.log(id + " was clicked"); var sidebarItems = document.querySelectorAll('.mobilesidebar-item'); sidebarItems.forEach(function(item) { var iElement = item.getElementsByTagName('div')[0].getElementsByTagName('i')[0]; if (item.id == "mobilesidebar-" + id) { console.log("making solid " + id) iElement.classList.add('fa-solid'); iElement.classList.remove('fa-light'); } else { iElement.classList.remove('fa-solid'); iElement.classList.add('fa-light'); } }); var sidebarItems = document.querySelectorAll('.sidebar-item'); // remove 'active' class from all 'sidebar-item' elements sidebarItems.forEach(function(item) { if (item.id == "sidebar-" + id) { console.log("making active " + id) item.classList.add('active'); } else { item.classList.remove('active'); } }); } </script> </div> <div id="scroll-top-outer"> <div id="scroll-top" class="scroll-top-wrapper hidden-xs"> <span class="scroll-top-inner"> <i class="fa fa-arrow-circle-up fa-fw fa-2x"></i> </span> </div> </div> <script> $(function() { $(document).on('scroll', function() { if ($(window).scrollTop() > 100) { $('.scroll-top-wrapper').addClass('show'); } else { $('.scroll-top-wrapper').removeClass('show'); } }); $('.scroll-top-wrapper').on('click', scrollToTop); }); function scrollToTop() { verticalOffset = typeof(verticalOffset) != 'undefined' ? verticalOffset : 0; element = $('body'); offset = element.offset(); offsetTop = offset.top; $('html, body').animate({ scrollTop: offsetTop }, 100, 'linear'); } if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { let elements = document.querySelectorAll('strong.ctrlmeta'); elements.forEach((element) => { // Check if the innerText is "ctrl" if (element.innerText === 'ctrl') { // Create a new "i" element let newElement = document.createElement('i'); newElement.classList.add('fa-solid', 'fa-command'); // Replace the old "strong" element with the new "i" element element.parentNode.replaceChild(newElement, element); } }); } </script> </body> </html>