PageSourceSearch

https://docs-spectrocloud.netlify.app/assets/js/fe9d004a.2e2a5f68.js

js docs-spectrocloud.netlify.app collected 2026-10-03 10:41:08 UTC 68,840 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkspectro_cloud_docs=self.webpackChunkspectro_cloud_docs||[]).push([["11795"],{755567:function(e,s,t){t.r(s),t.d(s,{frontMatter:()=>d,toc:()=>a,default:()=>h,metadata:()=>r,assets:()=>c,contentTitle:()=>l});var r=JSON.parse('{"id":"clusters/edge/edge-configuration/installer-reference","title":"Edge Installer Configuration Reference","description":"Review the available Edge Installer configuration options.","source":"@site/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md","sourceDirName":"clusters/edge/edge-configuration","slug":"/clusters/edge/edge-configuration/installer-reference","permalink":"/clusters/edge/edge-configuration/installer-reference","draft":false,"unlisted":false,"editUrl":"https://github.com/spectrocloud/librarium/blob/master/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md","tags":[{"inline":true,"label":"edge","permalink":"/tags/edge"}],"version":"current","lastUpdatedAt":1777826507000,"sidebarPosition":20,"frontMatter":{"sidebar_label":"Installer Configuration Reference","title":"Edge Installer Configuration Reference","description":"Review the available Edge Installer configuration options.","hide_table_of_contents":false,"sidebar_position":20,"tags":["edge"]},"sidebar":"docSidebar","previous":{"title":"Sensitive User Data Handling","permalink":"/clusters/edge/edge-configuration/skip-copying-stages"},"next":{"title":"EdgeForge Workflow","permalink":"/clusters/edge/edgeforge-workflow/"}}'),i=t(474848),n=t(884429);let d={sidebar_label:"Installer Configuration Reference",title:"Edge Installer Configuration Reference",description:"Review the available Edge Installer configuration options.",hide_table_of_contents:!1,sidebar_position:20,tags:["edge"]},l,c={},a=[{value:"Palette Agent Parameters",id:"palette-agent-parameters",level:2},{value:"Feature Gates",id:"feature-gates",level:3},{value:"Multiple External Registries",id:"multiple-external-registries",level:3},{value:"Registry Parameters",id:"registry-parameters",level:4},{value:"Registry Mapping Rules",id:"registry-mapping-rules",level:4},{value:"Local Management",id:"local-management",level:5},{value:"Single External Registry",id:"single-external-registry",level:3},{value:"Site Parameters",id:"site-parameters",level:3},{value:"Device ID (UID) Parameters",id:"device-id-uid-parameters",level:4},{value:"Site Network Parameters",id:"site-network-parameters",level:4},{value:"Tags",id:"tags",level:4},{value:"Site Registry Parameters",id:"site-registry-parameters",level:3},{value:"Install Parameters",id:"install-parameters",level:2},{value:"Cloud Init Stages",id:"cloud-init-stages",level:2}];function o(e){let s={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",h4:"h4",h5:"h5",img:"img",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.R)(),...e.components},{Details:r,VersionedLink:d}=s;return r||x("Details",!0),d||x("VersionedLink",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(s.p,{children:["The Edge Installer configuration user data accepts a parameter named ",(0,i.jsx)(s.code,{children:"stylus"}),". In addition to the ",(0,i.jsx)(s.code,{children:"stylus"})," parameter,\nthe user data file also supports the use of cloud-init stages and other Kairos-supported parameters. The ",(0,i.jsx)(s.code,{children:"stylus.site"}),"\nparameter is how you primarily configure the Edge host, but you can also use cloud-init stages to customize the\ninstallation. Refer to the ",(0,i.jsx)(s.a,{href:"#site-parameters",children:"Site Parameters"})," for a list of all the parameters supported in the\n",(0,i.jsx)(s.code,{children:"stylus.site"})," parameter block."]}),"\n",(0,i.jsx)(s.admonition,{type:"info",children:(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.code,{children:"#cloud-config"})," value is a required cloud-init header required by the\n",(0,i.jsx)(s.a,{href:"https://cloudinit.readthedocs.io/en/latest/reference/index.html",children:"cloud-init"})," standard."]})}),"\n",(0,i.jsx)(s.h2,{id:"palette-agent-parameters",children:"Palette Agent Parameters"}),"\n",(0,i.jsxs)(s.p,{children:["These parameters start with the prefix ",(0,i.jsx)(s.code,{children:"stylus"}),". Palette agent parameters control various aspects of the Edge host's\nconfiguration, including networking, logging, services, as well as users and permissions. Parameters in this section are\nlisted in alphabetical order."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.debug"})}),(0,i.jsxs)(s.td,{children:["Enable this parameter for debug output. Allowed values are ",(0,i.jsx)(s.code,{children:"true"})," or ",(0,i.jsx)(s.code,{children:"false"}),"."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.disablePasswordUpdate"})}),(0,i.jsx)(s.td,{children:"Disables the ability to update Operating System (OS) user passwords from Local UI if set to true. Updating the password through the OS and API is still allowed."}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.disableTui"})}),(0,i.jsxs)(s.td,{children:["Disables the ability to interact with the Palette Terminal User Interface (TUI), preventing users from modifying Edge host and network settings. Edge host information is still displayed when set to ",(0,i.jsx)(s.code,{children:"true"}),". This flag cannot be changed post-installation."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.enableMultiNode"})}),(0,i.jsxs)(s.td,{children:["When set to ",(0,i.jsx)(s.code,{children:"true"}
1),", the host can link with other nodes to form a multi-node cluster. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/local-ui/cluster-management/link-hosts",children:"Link Hosts"}),"."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.externalRegistries"})}),(0,i.jsxs)(s.td,{children:["Use this parameter to configure multiple external registries and apply domain re-mapping rules. Refer to ",(0,i.jsx)(s.a,{href:"#multiple-external-registries",children:"Multiple External Registries"})," for more details."]}),(0,i.jsx)(s.td,{children:"Object"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.featureGate"})}),(0,i.jsx)(s.td,{children:"This parameter contains a comma-separated list of features you want to enable on your host."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.includeTui"})}),(0,i.jsxs)(s.td,{children:["(Deprecated) Enable Palette TUI for initial Edge host configuration. This parameter has been deprecated, and Palette TUI is always enabled regardless of its value. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/site-deployment/site-installation/initial-setup",children:"Initial Edge Host Configuration"}),"."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.localUI.login.attemptsBeforeExponentialDelayStarts"})}),(0,i.jsxs)(s.td,{children:["Number of consecutive failed Local UI login attempts before the exponential delay begins. After this threshold, each additional failed attempt doubles the wait time before the user can attempt to log in again. This parameter takes effect only when ",(0,i.jsx)(s.code,{children:"stylus.localUI.login.disableRateLimiting"})," is set to ",(0,i.jsx)(s.code,{children:"false"})," and is supported for Edge hosts built with Palette agent version 4.7.16 or later."]}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"3"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.localUI.login.disableRateLimiting"})}),(0,i.jsxs)(s.td,{children:["When set to ",(0,i.jsx)(s.code,{children:"false"}),", Local UI enforces a short delay after several consecutive failed login attempts and temporarily blocks the user's access. This parameter is supported for Edge hosts built with Palette agent version 4.7.16 or later."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.localUI.login.lockoutDurationInMinutes"})}),(0,i.jsxs)(s.td,{children:["Duration in minutes that Local UI login remains blocked after the user reaches the maximum number of unsuccessful login attempts. This parameter takes effect only when ",(0,i.jsx)(s.code,{children:"stylus.localUI.login.disableRateLimiting"})," is set to ",(0,i.jsx)(s.code,{children:"false"})," and is supported for Edge hosts built with Palette agent version 4.7.16 or later."]}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"15"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.localUI.login.maxFailedAttemptsBeforeLockout"})}),(0,i.jsxs)(s.td,{children:["Number of consecutive failed login attempts allowed before Local UI access is temporarily locked for the user. This parameter takes effect only when ",(0,i.jsx)(s.code,{children:"stylus.localUI.login.disableRateLimiting"})," is set to ",(0,i.jsx)(s.code,{children:"false"})," and is supported for Edge hosts built with Palette agent version 4.7.16 or later."]}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"5"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.localUI.port"})}),(0,i.jsx)(s.td,{children:"Specifies the port that Local UI is exposed on."}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"5080"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.managementMode"})}),(0,i.jsxs)(s.td,{children:["Allowed values are ",(0,i.jsx)(s.code,{children:"local"})," and ",(0,i.jsx)(s.code,{children:"central"}),". ",(0,i.jsx)(s.code,{children:"central"})," means the Edge host is connected to Palette; ",(0,i.jsx)(s.code,{children:"local"})," means the Edge host has no connection to a Palette instance."]}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"central"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.path"})}),(0,i.jsxs)(s.td,{children:["Specifies Stylus installation directory. Stylus appends its internal layout, ",(0,i.jsx)(s.code,{children:"/opt/spectrocloud"}),", to this path. If you omit this parameter, the system uses ",(0,i.jsx)(s.code,{children:"/"})," as the default root and installs Stylus to ",(0,i.jsx)(s.code,{children:"/opt/spectrocloud"}),"."]}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"/"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.registryCredentials"})}),(0,i.jsxs)(s.td,{children:["Only used when a single external registry is in use and n
1o mapping rules are needed. Refer to ",(0,i.jsx)(s.a,{href:"#single-external-registry",children:"Single External Registry"})," for more details."]}),(0,i.jsx)(s.td,{children:"Object"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site"})}),(0,i.jsxs)(s.td,{children:["Review ",(0,i.jsx)(s.a,{href:"#site-parameters",children:"Site Parameters"})," for more information."]}),(0,i.jsx)(s.td,{children:"Object"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.trace"})}),(0,i.jsxs)(s.td,{children:["Enable trace output. Allowed values are ",(0,i.jsx)(s.code,{children:"true"})," or ",(0,i.jsx)(s.code,{children:"false"}),"."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.vip.skip"})}),(0,i.jsxs)(s.td,{children:["When set to ",(0,i.jsx)(s.code,{children:"true"}),", the installer skips the configuration of kube-vip and enables the use of an external load balancer instead."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]})]})]}),"\n",(0,i.jsx)(s.admonition,{type:"warning",children:(0,i.jsxs)(s.p,{children:["Using custom ",(0,i.jsx)(s.code,{children:"stylus.path"})," values can lead to deployment issues in some configurations. Refer to\n",(0,i.jsx)(s.a,{href:"/release-notes/known-issues",children:"Known issues"})," for details."]})}),"\n",(0,i.jsx)(s.h3,{id:"feature-gates",children:"Feature Gates"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.code,{children:"stylus.featureGate"})," contains a comma-separated list of features you want to enable on your host. These features are not\nenabled by default unless you include the feature in the parameter. The following table displays the available features\nyou can enable using this parameter."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Value"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsx)(s.tbody,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"UserDataForm"})}),(0,i.jsxs)(s.td,{children:["This value enables you to edit the installer user data after installation in Local UI. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/local-ui/host-management/edit-user-data",children:"Edit User Data"}),"."]})]})})]}),"\n",(0,i.jsx)(s.h3,{id:"multiple-external-registries",children:"Multiple External Registries"}),"\n",(0,i.jsxs)(s.p,{children:["You can configure multiple external registries by using the ",(0,i.jsx)(s.code,{children:"stylus.externalRegistries"})," parameter object. You can also\napply domain mapping rules to map domain names to external registries."]}),"\n",(0,i.jsxs)(s.p,{children:["If you are using an external registry and want to use content bundles when deploying your Edge cluster, you must also\nuse an in-cluster primary registry. For more information, refer to\n",(0,i.jsx)(s.a,{href:"/clusters/edge/edgeforge-workflow/palette-canvos/build-content-bundle",children:"Build Content Bundles"})," and\n",(0,i.jsx)(s.a,{href:"/clusters/edge/site-deployment/deploy-custom-registries/deploy-primary-registry",children:"Deploy Cluster with Primary Registry"}),".."]}),"\n",(0,i.jsx)(s.p,{children:"Review the following parameters to configure external registries."}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.externalRegistries.registries"})}),(0,i.jsxs)(s.td,{children:["A list of external registries. Refer to ",(0,i.jsx)(s.a,{href:"#registry-parameters",children:"Registry Parameters"})," for more details."]}),(0,i.jsxs)(s.td,{children:["Array of ",(0,i.jsx)(s.code,{children:"Credentials"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.externalRegistries.registryMappingRules"})}),(0,i.jsxs)(s.td,{children:["A list of key-pair rules to map domain names to external registries. Refer to ",(0,i.jsx)(s.a,{href:"#registry-mapping-rules",children:"Registry Mapping Rules"})," for more details."]}),(0,i.jsxs)(s.td,{children:["Map of ",(0,i.jsx)(s.code,{children:"string"})," keys and values"]}),(0,i.jsx)(s.td,{children:"None"})]})]})]}),"\n",(0,i.jsx)(s.h4,{id:"registry-parameters",children:"Registry Parameters"}),"\n",(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.code,{children:"stylus.externalRegistries.registries"})," block accepts the following parameters."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"domain"})}),(0,i.jsx)(s.td,{children:"The domain of the registry."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"username"})}),(0,i.jsx)(s.td,{children:"The username to authenticate with the registry."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"password"})}),(0,i.jsx)(s.td,{children:"The password to authenticate with the registry."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"repositoryName"})}),(0,i.jsx)(s.td,{children:"The name of the repository within the registry."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"certificates"})}),(0,i.jsx)(s.td,{children:"A list of certificates in PEM format to use when accessing the registry."}
1),(0,i.jsx)(s.td,{children:"Array of strings"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"insecure"})}),(0,i.jsx)(s.td,{children:"Whether to allow insecure connections to the registry."}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"encodedPassword"})}),(0,i.jsx)(s.td,{children:"Whether the password is base64 encoded."}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]})]})]}),"\n",(0,i.jsx)(s.p,{children:"Below is an example of how to configure an external registry."}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:'stylus:\n  externalRegistries:\n    registries:\n      - domain: "example.registry.com/palette-images"\n        username: "admin"\n        password: "***************"\n        repositoryName: example-repository-private\n        certificates:\n          - |\n            -----BEGIN CERTIFICATE-----\n            MIIENDCCAxygAwIBAgIUSdnFq4anqjgKf2iRX2RP65LYpkwwDQYJKoZIhvcNAQEL\n            BQAwfzEpMCcGA1UEAwwgc2hydXRoaS1haXJnYXAyLnNwZWN0cm9jbG91ZC5kZXYx\n            FTATBgNVBAoMDFNwZWN0cm9DbG91ZDELMAkGA1UECwwCSVQxFDASBgNVBAcMC1Nh\n            bnRhIENsYXJhMQswCQYDVQQIDAJDQTELMAkGA1UEBhMCVVMwHhcNMjQwMTExMDkz\n            ODUzWhcNMzQwMTA4MDkzODUzWjB/MSkwJwYDVQQDDCBzaHJ1dGhpLWFpcmdhcDIu\n            c3BlY3Ryb2Nsb3VkLmRldjEVMBMGA1UECgwMU3BlY3Ryb0Nsb3VkMQswCQYDVQQL\n            DAJJVDEUMBIGA1UEBwwLU2FudGEgQ2xhcmExCzAJBgNVBAgMAkNBMQswCQYDVQQG\n            EwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANcPucLatrCHmR+o\n            h6pIReisVxbJI0jqlVfive+mDp64Z3aXbzlX634chbyjd6G8xmZXH0beIZE91yGD\n            42atamrqDSADcZRvjUmqGzf/nrm3sOCHOKNMvMFZJ0uGFjwuwxIDf91+Vgj0FZRe\n            j+nVRI3XQyAdJXP6sls8vu8bHk6RDMLYb+IzMWzFuPGDUv3fU41a3dijVfMxt6hj\n            MdoUe6wzTr46ylUgm5rB/SKrMcg41ZNFcqYLhHt6KsS/0G8hjrvo7d+BeNcxf6GP\n            xOWyimdq18suHqFQ82ieCxB8gR2Ig15ch8UG1p95JbVMjzLTi3tgU9EARuftsUK9\n            spdn2cUCAwEAAaOBpzCBpDAdBgNVHQ4EFgQUDVk6cnlax94aPm3F+fubzHj8vaIw\n            HwYDVR0jBBgwFoAUDVk6cnlax94aPm3F+fubzHj8vaIwDwYDVR0TAQH/BAUwAwEB\n            /zA8BgNVHREENTAzgglsb2NhbGhvc3SHBH8AAAGCIHNocnV0aGktYWlyZ2FwMi5z\n            cGVjdHJvY2xvdWQuZGV2MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEB\n            CwUAA4IBAQATfu3drGJkmFD58KvUKuOhAY28TpVquH63W40JchVjhtOmg+WHfPIE\n            8dvYYKiZtrpFZDUcAVtn/KJIZoNbq51o7mWj/rl6W5pcajBLoqcvlDH0zXzVgF+f\n            +gj68SMegHwp+EO/dK9LfLp2bxNuBPCnvLj3eMs0HCdmZW1uzVm71YIXTSXwgm/2\n            nMnI5ELi2kuufCZh5wQxr7km+qZgTteaZI2h+YNU88m/SreRFHfBP8QRfkqTumfW\n            Sz3rWOQ93KXO/CEk+XySnVFgS+JdGtpmRalOfGeJ0Kk8hraX3h/2KkD0Vd99DIMN\n            DlN636dYFSJBG3LjGuzyO66kEvbGJAIT\n            -----END CERTIFICATE-----\n    registryMappingRules:\n      "us-docker.pkg.dev/palette-images": "example.registry.com/palette-images"\n      "us-east1-docker.pkg.dev/spectro-images/daily": "example.registry.com/palette-images"\n      "gcr.io/spectro-dev-public": "example.registry.com/palette-images"\n      "gcr.io/spectro-images-public": "example.registry.com/palette-images"\n'})}),"\n",(0,i.jsx)(s.h4,{id:"registry-mapping-rules",children:"Registry Mapping Rules"}),"\n",(0,i.jsxs)(s.p,{children:["Use registry mapping rules to map a domain name to an external registry. The ",(0,i.jsx)(s.code,{children:"registryMappingRules"})," parameter accepts a\nlist of key-value pairs where the key is the domain name and the value is a URL mapping to the external registry."]}),"\n",(0,i.jsxs)(s.p,{children:["Below is an example of registry mapping rules. The registry in the code snippet, ",(0,i.jsx)(s.code,{children:"example.registry.com/palette-images"}),"\nis assumed to contain the images that are mapped from the external registries."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:'stylus:\n  externalRegistries:\n    registries:\n      - domain: "example.registry.com/palette-images"\n        repositoryName: "primary-registry"\n        username: "admin"\n        password: "***************"\n    registryMappingRules:\n      "us-docker.pkg.dev/palette-images": "example.registry.com/palette-images"\n      "us-east1-docker.pkg.dev/spectro-images/daily": "example.registry.com/palette-images"\n      "gcr.io/spectro-dev-public": "example.registry.com/palette-images"\n      "gcr.io/spectro-images-public": "example.registry.com/palette-images"\n'})}),"\n",(0,i.jsxs)(s.p,{children:["All matched portion on the source URL will be replaced with the mapped value and any unmatched path is preserved. Using\nthe example in the following diagram, if an image named ",(0,i.jsx)(s.code,{children:"alpine:latest"})," is stored at\n",(0,i.jsx)(s.code,{children:"somedomain.com/somepath/example-repo/alpine:latest"}),", the mapping rules will rewrite image pulls so that they reference\n",(0,i.jsx)(s.code,{children:"targetdomain.com/other/path/example-repo/alpine:latest"}),"."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Example of registry mapping rules",src:t(266971).A+"",width:"1306",height:"396"})}),"\n",(0,i.jsx)(s.h5,{id:"local-management",children:"Local Management"}),"\n",(0,i.jsxs)(s.p,{children:["For a locally managed cluster, use the ",(0,i.jsx)(s.code,{children:"registryMappingRules"})," parameter to map domain names to external registries that\nwere downloaded when creating the ",(0,i.jsx)(s.a,{href:"/clusters/edge/edgeforge-workflow/palette-canvos/build-content-bundle",children:"content bundle"}),"."]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.p,{children:["Palette will automatically update the image path when ",(0,i.jsx)(d,{text:"Harbor Edge-Native Config",url:"/integrations/packs/?pack=harbor-edge-native-config"})," or ",(0,i.jsx)(d,{text:"Registry Connect",url:"/integrations/packs/?pack=registry-connect"}),"  pack is enabled. For example, if you have a registry mapping rule such as the following."]}),(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:'"us-docker.pkg.dev/palette-images": "example.registry.com/palette-images"\n'})}),(0,i.jsxs)(s.p,{children:["Then the image tag will be updated with the prefix URL to the primary registry, such as\n",(0,i.jsx)(s.code,{children:"https://10.10.100.45:30003/example.registry.com/palette-images"}),". Palette will do this for all registry mapping rules\nspecified in the user data. This allows the Edge host to find and pull images that came from an external registry\nthrough the primary registry."]}),(0,i.jsxs)(s.p,{children:["Note that the Harbor Edge-Native Config pack is deprecated and will be removed in a future release. Refer to\n",(0,i.jsx)(s.a,{href:"/clusters/edge/site-deployment/deploy-custom-registries/migrate-edge-native-config",children:"Migrate from Harbor Edge-Native Config Pack"}),"\nfor guidance on transitioning to Registry Connect."]}),(0,i.jsxs)(s.p,{children:["The Registry Connect pack additionally supports ",(0,i.jsx)(s.code,{children:"imageReplacementRules"})," (defined in the pack YAML under\n",(0,i.jsx)(s.code,{children:"charts.registry-connect.config.registry.imageReplacementRules"}),"), which serve the same purpose as\n",(0,i.jsx)(s.code,{children:"registryMappingRules"}),". If you provide both settings, the configuration in ",(0,i.jsx)(s.code,{children:"imageReplacementRules"})," takes precedence over\n",(0,i.jsx)(s.code,{children:"registryMappingRules"}),"."]})]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:'stylus:\n  managementMode: local\n  externalRegistries:\n    registryMappingRules:\n      "us-docker.pkg.dev/palette-images": "example.registry.com/palette-images"\n      "us-east1-docker.pkg.dev/spectro-images/daily": "example.registry.com/palette-images"\n      "gcr.io/spectro-dev-public": "example.registry.com/palette-images"\n      "gcr.io/spectro-images-public": "example.registry.com/palette-images"\n'})}),"\n",(0,i.jsx)(s.h3,{id:"single-external-registry",children:"Single External Registry"}),"\n",(0,i.jsxs)(s.p,{children:["You can point the Edge Installer to a non-default registry to load content from another source. Use the\n",(0,i.jsx)(s.code,{children:"registryCredentials"})," parameter object to specify the registry configurations. If you have multiple external registries,\nuse the ",(0,i.jsx)(s.code,{children:"stylus.externalRegistries"})," parameter object instead. Refer to the\n",(0,i.jsx)(s.a,{href:"#multiple-external-registries",children:"Multiple Exter
1nal Registries"})," section for more information."]}),"\n",(0,i.jsxs)(s.p,{children:["If you are using an external registry and want to use content bundles when deploying your Edge cluster, you must also\nenable the local Harbor registry. For more information, refer to\n",(0,i.jsx)(s.a,{href:"/clusters/edge/edgeforge-workflow/palette-canvos/build-content-bundle",children:"Build Content Bundles"})," and\n",(0,i.jsx)(s.a,{href:"/clusters/edge/site-deployment/deploy-custom-registries/deploy-primary-registry",children:"Deploy Cluster with Primary Registry"}),"."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.registryCredentials.domain"})}),(0,i.jsx)(s.td,{children:"The domain of the registry. You can use an IP address plus a port or a domain name."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.registryCredentials.username"})}),(0,i.jsx)(s.td,{children:"The username to authenticate with the registry."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.registryCredentials.password"})}),(0,i.jsx)(s.td,{children:"The password to authenticate with the registry."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.registryCredentials.encodedPassword"})}),(0,i.jsxs)(s.td,{children:["Set to ",(0,i.jsx)(s.code,{children:"true"})," if the password given is base64 encoded. Set to ",(0,i.jsx)(s.code,{children:"false"})," if the password given is not encoded."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]})]})]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"#cloud-config\nstylus:\n  registryCredentials:\n    domain: 10.10.254.254:8000/spectro-images\n    username: ubuntu\n    password: <yourPassword>\n    insecure: true\n"})}),"\n",(0,i.jsx)(s.h3,{id:"site-parameters",children:"Site Parameters"}),"\n",(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.code,{children:"stylus.site"})," blocks accept the following parameters."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.caCerts"})}),(0,i.jsx)(s.td,{children:"The Secure Sockets Layer (SSL) Certificate Authority (CA) certificates. The certificates must be base64-encoded."}),(0,i.jsx)(s.td,{children:"Array of strings"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.clusterId"})}),(0,i.jsx)(s.td,{children:"The ID of the cluster the Edge host belongs to."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.clusterName"})}),(0,i.jsx)(s.td,{children:"The name of the cluster the Edge host belongs to."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.deviceUIDPaths"})}),(0,i.jsxs)(s.td,{children:["A list of file paths for reading in a product or board serial that can be used to set the device ID. The default file path is ",(0,i.jsx)(s.code,{children:"/sys/class/dmi/id/product_uuid"}),". Refer to the ",(0,i.jsx)(s.a,{href:"#device-id-uid-parameters",children:"Device ID (UID) Parameters"})," section to learn more."]}),(0,i.jsxs)(s.td,{children:["Array of ",(0,i.jsx)(s.code,{children:"FileList"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.edgeHostToken"})}),(0,i.jsx)(s.td,{children:"A token created at the tenant scope that is required for auto registration."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.hostName"})}),(0,i.jsxs)(s.td,{children:["The host name for the Edge host. This will also be the node's name when the host is added to a cluster. If you do not specify a host name, the ",(0,i.jsx)(s.code,{children:"stylus.site.name"})," value becomes the host name."]}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.insecureSkipVerify"})}),(0,i.jsx)(s.td,{children:"This controls whether or not a client verifies the server\u2019s certificate chain and hostname."}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.name"})}),(0,i.jsx)(s.td,{children:"The Edge host ID with which the host registers with Palette."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network"})}),(0,i.jsxs)(s.td,{children:["The network configuration settings. Refer to ",(0,i.jsx)(s.a,{href:"#site-network-parameters",children:"Site Network Parameters"})," for more details."]}),(0,i.jsx)(s.td,{children:"Object"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.paletteEndpoint"})}),(0,i.jsxs)(s.td,{children:["The URL endpoint that points to Palette. Example: ",(0,i.jsx)(s.code,{children:"api.spectrocloud.com"})]}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.prefix"})}),(0,i.jsxs)(s.td,{children:["A prefix prepended to the Edge device hostname to form the Edge device ID. O
1nly alphanumeric characters and ",(0,i.jsx)(s.code,{children:"-"})," are allowed."]}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"edge"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.projectName"})}),(0,i.jsx)(s.td,{children:"The name of the project to which the Edge host belongs."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.projectUid"})}),(0,i.jsx)(s.td,{children:"The ID of the project to which the Edge host belongs."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.registrationURL"})}),(0,i.jsx)(s.td,{children:"The URL that operators use to register the Edge host with Palette."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.remoteShell.disable"})}),(0,i.jsxs)(s.td,{children:["When set to ",(0,i.jsx)(s.code,{children:"true"}),", disables remote shell access to the host. This parameter is supported for Edge hosts built with Palette agent version 4.7.16 or later."]}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tags"})}),(0,i.jsxs)(s.td,{children:["A parameter object you can use to provide optional key-value pairs. Refer to the ",(0,i.jsx)(s.a,{href:"#tags",children:"Tags"})," section to learn more."]}),(0,i.jsxs)(s.td,{children:["Map of ",(0,i.jsx)(s.code,{children:"string"})," and object value"]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tagsFromFile"})}),(0,i.jsxs)(s.td,{children:["Specify tags from a file. Refer to ",(0,i.jsx)(s.a,{href:"#tags",children:"Tags"})," for more information."]}),(0,i.jsxs)(s.td,{children:[(0,i.jsx)(s.code,{children:"TagsFromFile"})," object"]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tagsFromScript"})}),(0,i.jsxs)(s.td,{children:["Use a script to generate tags. Refer to ",(0,i.jsx)(s.a,{href:"#tags",children:"Tags"})," for more information."]}),(0,i.jsxs)(s.td,{children:[(0,i.jsx)(s.code,{children:"TagsFromScript"})," object"]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.users"})}),(0,i.jsx)(s.td,{children:"The list of users to create on the Edge host as part of site configuration. Each list item accepts parameters as follows in this table."}),(0,i.jsx)(s.td,{children:"None"}),(0,i.jsx)(s.td,{})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.users[*].groups"})}),(0,i.jsxs)(s.td,{children:["The list of groups that the user belongs to. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:"None"}),(0,i.jsx)(s.td,{})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.users[*].passwd"})}),(0,i.jsxs)(s.td,{children:["The password of the user. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:"None"}),(0,i.jsx)(s.td,{})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.users[*].passwordExpiry"})}),(0,i.jsxs)(s.td,{children:["The date in YYYY-MM-DD format when the password expires. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:"None"}),(0,i.jsx)(s.td,{})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.users[*].lock_passwd"})}),(0,i.jsxs)(s.td,{children:["When set to ",(0,i.jsx)(s.code,{children:"true"}),", disables password configuration by the user. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})}),(0,i.jsx)(s.td,{})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.users[*].ssh_authorized_keys"})}),(0,i.jsxs)(s.td,{children:["The list of public SSH keys authorized for the user. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:"None"}),(0,i.jsx)(s.td,{})]})]})]}),"\n",(0,i.jsx)(s.admonition,{type:"info",children:(0,i.jsxs)(s.p,{children:["If you do not specify an Edge host ID for the Edge host with ",(0,i.jsx)(s.code,{children:"stylus.site.name"})," , the system will generate one from the\nserial number of the device in the format of ",(0,i.jsx)(s.code,{children:"edge-<serial-number>"}),". If the Edge Installer cannot identify the serial\nnumber, it will generate a random ID instead. In cases where the hardware does not have a serial number, we suggest that\nyou specify a value so there is minimal chance of duplication. Use the value ",(0,i.jsx)(s.code,{children:'"$random"'})," to generate a random ID. You\ncan also use the ",(0,i.jsx)(s.code,{children:"DeviceUIDPaths"})," to read in a value from a system file."]})}),"\n",(0,i.jsx)(s.h4,{id:"device-id-uid-parameters",children:"Device ID (UID) Parameters"}),"\n",(0,i.jsxs)(s.p,{children:["The device ID is generated by a specific priority sequence. The below table outlines the priority order from top to\nbottom when generating a UID for the Edge host. The UID generation starts with priority one, the device ",(0,i.jsx)(s.code,{children:"name"}),", followed\nby attributes within the ",(0,i.jsx)(s.code,{children:"deviceUIDPAths"}),", and lastly generating a random UUID if all other methods are unsuccessful."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Priority"}),(0,i.jsx)(s.th,{children:"Method"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"1"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"name"})}),(0,i.jsx)(s.td,{children:"The device name is used as the primary identifier for the Edge host."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"2"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"deviceUIDPaths"})}),(0,i.jsx)(s.td,{children:"Specifies the paths and associated regular expressions to extract the UID."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:"3"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:'"$random"'})}),(0,i.jsx)(s.td,{children:"Assigns a random UUID as the Edge host ID."})]})]})]}),"\n",(0,i.jsxs)(s.p,{children:["By default, the product UID path is set to ",(0,i.jsx)(s.code,{children:"/sys/class/dmi/id/product_uuid"}),". To modify this path and use other\nattributes within the same folder, such as the product or board serial, use the ",(0,i.jsx)(s.code,{children:"regex"})," parameter. For example, instead\nof the default path ",(0,i.jsx)(s.strong,{children:"/sys/class/dmi/id/product_uuid"}),", you can use the board Serial Number path\n",(0,i.jsx)(s.strong,{children:"/sys/class/dmi/id/board_serial"})," by applying a ",(0,i.jsx)(s.code,{children:"regex"})," parameter. Refer to the\n",(0,i.jsx)(s.a,{href:"https://github.com/google/re2/wiki/Syntax",children:"regex syntax"})," reference guide to learn more."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.deviceUIDPaths[*].name"})}),(0,i.jsx)(s.td,{children:"The path of the file containing the UID."})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.deviceUIDPaths[*].regex"})}),(0,i.jsx)(s.td,{children:"The regular expression pattern to match the UID."})]})]})]}),"\n",(0,i.jsxs)(s.p,{children:["You can use the ",(0,i.jsx)(s.code,{children:"regex"})," parameter to remove unsupported characters from attributes. Refer to the warning box below for a\nlist of unsupported characters."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:'#cloud-config\nstylus:\n  site:\n    deviceUIDPaths:\n      - name: /etc/palette/metadata-regex\n        regex: "edge.*"\n'})}),"\n",(0,i.jsxs)(s.admonition,{type:"warning",children:[(0,i.jsx)(s.p,{children:"The length of the UID truncates to a maximum allowed length of 128 characters. The following characters are unsupported:"}),(0,i.jsx)(s.p,{children:(0,i.jsx)(s.code,{children:"/ ? # & + % , $ ~ ! @ * () {} | = ; : <> ' . ^ \""})})]}),"\n",(0,i.jsx)(s.h4,{id:"site-network-parameters",children:"Site Network Parameters"}),"\n",(0,i.jsx)(s.p,{children:"Use the site network parameters to configure network settings so the edge host can communicate with Palette."}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.httpProxy"})}),(0,i.jsx)(s.td,{children:"The URL of the HTTP proxy endpoint."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.httpsProxy"})}),(0,i.jsx)(s.td,{children:"The URL of the HTTPS proxy endpoint."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.noProxy"})}),(0,i.jsx)(s.td,{children:"The list of IP addresses or CIDR ranges to exclude from routing through the proxy."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.interfaces"})}),(0,i.jsxs)(s.td,{children:["The network settings for each interface. This parameter accepts a map of keys named after your NICs (for example, ",(0,i.jsx)(s.code,{children:"eth0"}),")."]}),(0,i.jsxs)(s.td,{children:["Map of ",(0,i.jsx)(s.code,{children:"string"})," keys and ",(0,i.jsx)(s.code,{children:"NetworkInterface"})," values"]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.interfaces.[NIC].ipAddress"})}),(0,i.jsx)(s.td,{children:"The assigned IP address to the network interface."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.interfaces.[NIC].mask"})}),(0,i.jsx)(s.td,{children:"The network mask for the assigned IP address."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.interfaces.[NIC].type"})}),(0,i.jsxs)(s.td,{children:["Defines how the IP address is assigned. Allowed values are ",(0,i.jsx)(s.code,{children:"dhcp"})," or ",(0,i.jsx)(s.code,{children:"static"}),"."]}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"dhcp"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.interfaces.[NIC].gateway"})}),(0,i.jsx)(s.td,{children:"The network gateway IP address."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.interfaces.[NIC].nameserver"})}),(0,i.jsx)(s.td,{children:"The IP address of the DNS nameserver for this interface."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.network.nameserver"})}),(0,i.jsx)(s.td,{children:"The IP address of the global DNS nameserver to route requests to."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]})]})]}),"\n",(0,i.jsx)(s.admonition,{type:"warning",children:(0,i.jsxs)(s.p,{children:["The proxy settings in user data configure Palette services to use the proxy network. However, these settings do not\nautomatically apply to application workloads. To configure applications to use the proxy configurations, refer to\n",(0,i.jsx)(s.a,{href:"/clusters/cluster-management/cluster-proxy",children:"Configure Applications to Use Proxy Server"}),"."]})}),"\n",(0,i.jsx)(s.h4,{id:"tags",children:"Tags"}),"\n",(0,i.jsxs)(s.p,{children:["You can specify tags from a file by using the ",(0,i.jsx)(s.code,{children:"tagsFromFile"})," parameter object or from a script by using the\n",(0,i.jsx)(s.code,{children:"tagsFromScript"})," parameter."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tagsFromFile.fileName"})}),(0,i.jsx)(s.td,{children:"The path to the file containing the tags."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tagsFromFile.delimiter"})}),(0,i.jsx)(s.td,{children:"The delimiter used to separate each key-value pair."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"\\n"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tagsFromFile.separator"})}),(0,i.jsx)(s.td,{children:"The separator used to split the key from the value."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:":"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tagsFromScript.scriptName"})}),(0,i.jsx)(s.td,{children:"The path to the script that returns a JSON object."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.site.tagsFromScript.timeout"})}),(0,i.jsx)(s.td,{children:"The timeout value in seconds for the script to return."}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"60"})})]})]})]}),"\n",(0,i.jsxs)(s.p,{children:["With tags from a file, you can specify different delimiters and separators to parse the content of a file depending on\nhow the content is formatted. For example, assume the file ",(0,i.jsx)(s.strong,{children:"/etc/palette/tags.txt"})," contains the following content."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-text",metastring:"hideClipboard",children:"Location:Mumbai,India; Latitude:48.856614; Longitude:2.352221; owner:p78125d\n"})}),"\n",(0,i.jsxs)(s.p,{children:["The following configuration can produce these tags: ",(0,i.jsx)(s.code,{children:"Location: Mumbai,India"}),", ",(0,i.jsx)(s.code,{children:"Latitude: 48.856614"}),",\n",(0,i.jsx)(s.code,{children:"Longitude:2.352221"}),", ",(0,i.jsx)(s.code,{children:"owner:p78125d"}),", ",(0,i.jsx)(s.code,{children:"department: sales"}),"."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:'#cloud-config\nstylus:\n  site:\n    tags:\n      department: "sales"\n    tagsFr
1omFile:\n      fileName: "/etc/palette/tags.txt"\n      delimiter: ";"\n      separator: ":"\n'})}),"\n",(0,i.jsxs)(s.p,{children:["You can specify tags from a script by using the ",(0,i.jsx)(s.code,{children:"tagsFromScript"})," parameter object. The script must be bash script that\nis executable and return a JSON object that contains the tags in the following format."]}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-json",metastring:"hideClipboard",children:'{\n  "key": "value"\n}\n'})}),"\n",(0,i.jsx)(s.p,{children:"For example, if you have a bash script that returns the following JSON output:"}),"\n",(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-json",children:'{\n  "department": "sales",\n  "owner": "p78125d"\n}\n'})}),"\n",(0,i.jsxs)(s.p,{children:["You can configure ",(0,i.jsx)(s.code,{children:"stylus.site.tagsFromScript"})," to point to the script, and it will add the tags ",(0,i.jsx)(s.code,{children:"owner:p78125d"})," and\n",(0,i.jsx)(s.code,{children:"department: sales"})," to the Edge host."]}),"\n",(0,i.jsx)(s.h3,{id:"site-registry-parameters",children:"Site Registry Parameters"}),"\n",(0,i.jsxs)(s.p,{children:["Palette uses a webhook to redirect image pulls when you have specified an external registry or use a local Harbor\nregistry. If you find this redirect behavior to be limiting, you can disable the webhook. For more information, refer to\n",(0,i.jsx)(s.a,{href:"/clusters/edge/site-deployment/deploy-custom-registries/webhook-disable",children:"Disable Webhook to Customize Image Pull Behavior"}),"."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.imageRedirectWebhook.enable"})}),(0,i.jsx)(s.td,{children:"Whether to enable the webhook to redirect image pulls."}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"true"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stylus.imageRedirectWebhook.port"})}),(0,i.jsx)(s.td,{children:"The port on which the webhook listens."}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"0"})})]})]})]}),"\n",(0,i.jsx)(s.h2,{id:"install-parameters",children:"Install Parameters"}),"\n",(0,i.jsxs)(s.p,{children:["The ",(0,i.jsx)(s.code,{children:"install"})," block allows you to configure the installer to make bind mounts and disk partitions on the Edge host. In\naddition, you can specify post-installation behavior, such as instructing the Edge host to power off automatically after\ninstallation is complete."]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Type"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.bind_mounts"})}),(0,i.jsx)(s.td,{children:"The list of folders to bind mount from the installer environment into the Edge host."}),(0,i.jsx)(s.td,{children:"Array of strings"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.extra-dirs-rootfs"})}),(0,i.jsxs)(s.td,{children:["The list of folders to bind mount from the installer to the Edge host's root file system. These folders are created in the ",(0,i.jsx)(s.code,{children:"rootfs"})," path during installation."]}),(0,i.jsx)(s.td,{children:"Array of strings"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.grub_options.extra_cmdline"})}),(0,i.jsx)(s.td,{children:"Kernel command-line parameters to add to the installer."}),(0,i.jsx)(s.td,{children:"Map of strings"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.partitions.persistent"})}),(0,i.jsx)(s.td,{children:"A persistent partition object that you can configure for extra storage."}),(0,i.jsx)(s.td,{children:"Object"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.partitions.persistent.size"})}),(0,i.jsx)(s.td,{children:"The size of the persistent partition."}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"0"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.partitions.persistent.fs"})}),(0,i.jsxs)(s.td,{children:["The file system type for the persistent partition. You must provide a value for this parameter (for example, ",(0,i.jsx)(s.code,{children:"ext4"}),")."]}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.extra-partitions"})}),(0,i.jsxs)(s.td,{children:["The list of extra partitions to create. Each item accepts ",(0,i.jsx)(s.code,{children:"name"}),", ",(0,i.jsx)(s.code,{children:"size"}),", ",(0,i.jsx)(s.code,{children:"fs"}),", and ",(0,i.jsx)(s.code,{children:"label"}),"."]}),(0,i.jsx)(s.td,{children:"Array of partition objects"}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.extra-partitions[*].name"})}),(0,i.jsx)(s.td,{children:"The name of the extra partition."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.extra-partitions[*].size"})}),(0,i.jsx)(s.td,{children:"The size of the extra partition."}),(0,i.jsx)(s.td,{children:"Integer"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"0"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.extra-partitions[*].fs"})}),(0,i.jsx)(s.td,{children:"The file system of the extra partition."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.extra-partitions[*].label"})}),(0,i.jsx)(s.td,{children:"The label of the extra partition."}),(0,i.jsx)(s.td,{children:"String"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"''"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.poweroff"})}),(0,i.jsx)(s.td,{children:"Whether to power off the Edge host after installation completes."}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"install.reboot"})}),(0,i.jsx)(s.td,{children:"Whether to reboot the Edge host after installation completes."}),(0,i.jsx)(s.td,{children:"boolean"}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]})]})]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.p,{children:["If you define multiple partitions, the installer allocates any remaining unallocated disk space to the last defined\npartition. This applies to partitions listed under both ",(0,i.jsx)(s.code,{children:"install.partitions"})," and ",(0,i.jsx)(s.code,{children:"install.extra-partitions"}),", in the\norder they appear. If you want all partitions to have fixed sizes, add a final partition to absorb the remaining\nunallocated space."]}),(0,i.jsxs)(r,{children:[(0,i.jsx)("summary",{children:"Examples"}),(0,i.jsxs)(s.p,{children:["In the example below, the ",(0,i.jsx)(s.code,{children:"persistent"})," partition is fixed at 200 GiB (200,000 MiB). Because ",(0,i.jsx)(s.code,{children:"data"})," is defined last, it\nreceives its requested 100 GiB (100,000 MiB) plus any remaining unallocated space on the disk."]}),(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"#cloud-config\ninstall:\n  partitions:\n    persistent:\n      size: 200000 # size in MiB\n  extra-partitions:\n    - name: data\n      size: 100000 #size in MiB\n      fs: ext4\n      label: DATA_PARTITION\n"})}),(0,i.jsxs)(s.p,{children:["In the following configuration, the ",(0,i.jsx)(s.code,{children:"persistent"})," partition is not defined and therefore has no assigned size. The\ninstaller allocates all remaining disk space to the ",(0,i.jsx)(s.code,{children:"persistent"})," partition after creating the ",(0,i.jsx)(s.code,{children:"data"})," partition."]}),(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"#cloud-config\ninstall:\n  extra-partitions:\n    - name: data\n      size: 100000 #size in MiB\n      fs: ext4\n      label: DATA_PARTITION\n"})}),(0,i.jsxs)(s.p,{children:["If both partitions require fixed sizes, add a final ",(0,i.jsx)(s.code,{children:"extra"})," partition to accommodate any leftover space."]}),(0,i.jsx)(s.pre,{children:(0,i.jsx)(s.code,{className:"language-yaml",children:"#cloud-config\ninstall:\n  partitions:\n    persistent:\n      size: 200000 #size in MiB\n  extra-partitions:\n    - name: data\n      size: 100000 #size in MiB\n      fs: ext4\n      label: DATA_PARTITION\n    - name: extra\n      size: 0\n      fs: ext4\n      label: EXTRA\n"})})]})]}),"\n",(0,i.jsx)(s.h2,{id:"cloud-init-stages",children:"Cloud Init Stages"}),"\n",(0,i.jsxs)(s.p,{children:["Cloud init stages allow you to automates the initialization of your Edge hosts during various stages of the system boot\nprocess. You can perform For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud-init Stages"}),"."]}),"\n",(0,i.jsxs)(s.admonition,{type:"info",children:[(0,i.jsxs)(s.p,{children:["You can configure users during any cloud-init stage. However, we strongly recommend that you use the ",(0,i.jsx)(s.code,{children:"initramfs"})," stage\nto configure users, because this is the earliest cloud-init stage."]}),(0,i.jsx)(s.p,{children:"If you need to debug the Edge host in the event it is unable to progress past a certain stage, you will be able to\nestablish an SSH connection into the Edge host because the users are already there. On the other hand, if you configure\nusers at a later stage and your Edge host is not able to progress to that stage during installation, you will not be\nable to access your Edge host because there are no users."})]}),"\n",(0,i.jsxs)(s.table,{children:[(0,i.jsx)(s.thead,{children:(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.th,{children:"Parameter"}),(0,i.jsx)(s.th,{children:"Description"}),(0,i.jsx)(s.th,{children:"Default"})]})}),(0,i.jsxs)(s.tbody,{children:[(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.*.users"})}),(0,i.jsxs)(s.td,{children:["The list of users to create at any cloud-init stage. Replace ",(0,i.jsx)(s.code,{children:"*"})," with the specific stage. Each list item accepts parameters as follows in this table."]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.*.users[*].groups"})}),(0,i.jsxs)(s.td,{children:["The list of groups that the user belongs to. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.*.users[*].passwd"})}),(0,i.jsxs)(s.td,{children:["The password of the user. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.*.users[*].lock_passwd"})}),(0,i.jsxs)(s.td,{children:["When set to ",(0,i.jsx)(s.code,{children:"true"}),", disables password configuration by the user. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"false"})})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.*.users[*].ssh_authorized_keys"})}),(0,i.jsxs)(s.td,{children:["The list of public SSH keys authorized for the user. Replace ",(0,i.jsx)(s.code,{children:"*"})," with your username."]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.initramfs"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"initramfs"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"}),"."]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.rootfs"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"rootfs"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.boot"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"boot"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.fs"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"fs"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.network"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"network"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.reconcile"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"reconcile"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.after-install"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"after-install"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.after-install-chroot"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"after-install-chroot"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.after-reset"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"after-reset"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.after-reset-chroot"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"after-reset-chroot"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{hr
1ef:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.before-install"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"before-install"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.before-upgrade"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"before-upgrade"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]}),(0,i.jsxs)(s.tr,{children:[(0,i.jsx)(s.td,{children:(0,i.jsx)(s.code,{children:"stages.before-reset"})}),(0,i.jsxs)(s.td,{children:["The ",(0,i.jsx)(s.code,{children:"before-reset"})," stage during Edge host installation. For more information, refer to ",(0,i.jsx)(s.a,{href:"/clusters/edge/edge-configuration/cloud-init",children:"Cloud Init Stages"})]}),(0,i.jsx)(s.td,{children:"None"})]})]})]})]})}function h(e={}){let{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}function x(e,s){throw Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},266971:function(e,s,t){t.d(s,{A:()=>r});let r=t.p+"assets/images/clusters_edge_edge-configuration_installer-reference_registry-mapping-82b753cad5b96d26b113c783a0189eaf.webp"},884429:function(e,s,t){t.d(s,{R:()=>d,x:()=>l});var r=t(296540);let i={},n=r.createContext(i);function d(e){let s=r.useContext(n);return r.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.