├── .github └── workflows │ ├── check-links-md.yml │ └── proofreading-vale.yml ├── .gitignore ├── .linkspector.yml ├── .spellcheck.yml ├── .textlintrc ├── .vale.ini ├── .vale ├── .vale-config │ └── 2-Hugo.ini ├── alex │ ├── Ablist.yml │ ├── Condescending.yml │ ├── Gendered.yml │ ├── LGBTQ.yml │ ├── Press.yml │ ├── ProfanityLikely.yml │ ├── ProfanityMaybe.yml │ ├── ProfanityUnlikely.yml │ ├── README.md │ ├── Race.yml │ ├── Suicide.yml │ └── meta.json ├── config │ └── vocabularies │ │ └── Nephio │ │ └── accept.txt └── proselint │ ├── Airlinese.yml │ ├── AnimalLabels.yml │ ├── Annotations.yml │ ├── Apologizing.yml │ ├── Archaisms.yml │ ├── But.yml │ ├── Cliches.yml │ ├── CorporateSpeak.yml │ ├── Currency.yml │ ├── Cursing.yml │ ├── DateCase.yml │ ├── DateMidnight.yml │ ├── DateRedundancy.yml │ ├── DateSpacing.yml │ ├── DenizenLabels.yml │ ├── Diacritical.yml │ ├── GenderBias.yml │ ├── GroupTerms.yml │ ├── Hedging.yml │ ├── Hyperbole.yml │ ├── Jargon.yml │ ├── LGBTOffensive.yml │ ├── LGBTTerms.yml │ ├── Malapropisms.yml │ ├── Needless.yml │ ├── Nonwords.yml │ ├── Oxymorons.yml │ ├── P-Value.yml │ ├── RASSyndrome.yml │ ├── README.md │ ├── Skunked.yml │ ├── Spelling.yml │ ├── Typography.yml │ ├── Uncomparables.yml │ ├── Very.yml │ └── meta.json ├── .wordlist.txt ├── LICENSE ├── Makefile ├── OWNERS ├── README.md ├── assets ├── icons │ └── logo.svg └── scss │ └── _variables_project.scss ├── config.toml ├── content └── en │ ├── _index.md │ ├── docs │ ├── _index.md │ ├── apis │ │ ├── _index.md │ │ ├── porch │ │ │ └── _index.md │ │ └── topology-and-networking │ │ │ └── _index.md │ ├── architecture.md │ ├── glossary-abbreviations.md │ ├── guides │ │ ├── _index.md │ │ ├── contributor-guides │ │ │ ├── _index.md │ │ │ ├── documentation.md │ │ │ ├── helm-to-operator-codegen-sdk-developer-guide.md │ │ │ ├── minimal-environment.md │ │ │ └── unit-testing-mockery.md │ │ ├── install-guides │ │ │ ├── _index.md │ │ │ ├── common-components.md │ │ │ ├── common-dependencies.md │ │ │ ├── demo-vagrant-windows.md │ │ │ ├── explore-nephio-free5gc.md │ │ │ ├── explore-sandbox.md │ │ │ ├── install-on-byoc.md │ │ │ ├── install-on-gce.md │ │ │ ├── install-on-gcp.md │ │ │ ├── install-on-multiple-vm.md │ │ │ ├── install-on-openshift.md │ │ │ ├── install-on-single-vm.md │ │ │ ├── optional-components.md │ │ │ ├── package-transformations.md │ │ │ └── web-ui │ │ │ │ ├── _index.md │ │ │ │ ├── webui-auth-gcp.md │ │ │ │ └── webui-auth-okta.md │ │ └── user-guides │ │ │ ├── _index.md │ │ │ ├── helm │ │ │ ├── _index.md │ │ │ ├── flux-helm.md │ │ │ └── helm-to-operator-codegen-sdk-user-guide.md │ │ │ ├── operator-controller-guides │ │ │ ├── _index.md │ │ │ └── controllers.md │ │ │ └── usecase-user-guides │ │ │ ├── _index.md │ │ │ ├── exercise-1-free5gc.md │ │ │ ├── exercise-2-oai.md │ │ │ ├── exercise-3-fluxcd-wl.md │ │ │ ├── exercise-4-o2ims.md │ │ │ └── exercise-4-ocloud-cluster-prov.md │ ├── network-architecture │ │ ├── _index.md │ │ └── o-ran-integration.md │ ├── porch │ │ ├── _index.md │ │ ├── config-as-data.md │ │ ├── contributors-guide │ │ │ ├── _index.md │ │ │ ├── dev-process.md │ │ │ ├── environment-setup-vm.md │ │ │ └── environment-setup.md │ │ ├── function-runner-pod-templates.md │ │ ├── package-orchestration.md │ │ ├── package-variant.md │ │ ├── running-porch │ │ │ ├── _index.md │ │ │ ├── running-locally.md │ │ │ └── running-on-GKE.md │ │ └── user-guides │ │ │ ├── _index.md │ │ │ ├── git-authentication-config.md │ │ │ ├── install-and-using-porch.md │ │ │ ├── porchctl-cli-guide.md │ │ │ └── using-authenticated-private-registries.md │ └── release-notes │ │ ├── R1.md │ │ ├── R2.md │ │ ├── R3.md │ │ ├── R4.md │ │ └── _index.md │ └── featured-background.jpg ├── default.md ├── diagrams └── src │ ├── level1-nephio-system.puml │ ├── level2-nephio-container.puml │ ├── level3-nephio-core-component.puml │ └── level3-nephio-porch-component.puml ├── go.mod ├── go.sum ├── layouts ├── _default │ └── _markup │ │ ├── render-heading.html │ │ ├── render-image.html │ │ └── render-link.html └── partials │ └── footer.html ├── learning.md ├── netlify.toml ├── package.json ├── postcss.config.js ├── resources.md ├── static └── images │ ├── architecture │ ├── level1-nephio-system.png │ ├── level2-nephio-container.png │ ├── level3-nephio-core-component.png │ └── nephio-porch-component-view.png │ ├── install-guides │ ├── ManagementCluster.drawio │ ├── ManagementCluster.png │ ├── SandboxRepos.drawio │ ├── gcp-console-packages.png │ └── install-guide-gcp-nephio-login.png │ ├── network-architecture │ └── o-ran │ │ ├── deployment-architecture.png │ │ ├── focom-ims.png │ │ ├── focom.png │ │ ├── focom1.png │ │ ├── focom2.png │ │ ├── ims-provisioning-create-cluster.png │ │ └── nf-orch-smo.png │ ├── not-brave-enough-to-delete │ ├── nephio-R1-5G-network.drawio │ ├── nephio-R1-demo.drawio │ └── nephio-R1-demo.png │ ├── porch │ ├── CaD-Core-Architecture.svg │ ├── CaD-Overview.svg │ ├── Porch-Architecture.svg │ ├── Porch-Inner-Loop.svg │ ├── contributor │ │ ├── 01_VSCodeOpenPorchFolder.png │ │ ├── 02_VSCodeConnectedPorch.png │ │ ├── 03_LaunchOverrideServer.png │ │ ├── 04_GoDebugNotSupportedPopup.png │ │ ├── 05_GoExtensionAutoSelected.png │ │ └── 06_GoExtensionInstalled.png │ ├── packagevariant-clone.png │ ├── packagevariant-config-injection.png │ ├── packagevariant-context.png │ ├── packagevariant-function.png │ ├── packagevariant-legend.png │ ├── packagevariantset-target-list-with-packages.png │ ├── packagevariantset-target-list.png │ └── packagevariantset-target-repo-selector.png │ └── user-guides │ ├── UPF-Capacity-10.png │ ├── UPF-Capacity-11.png │ ├── UPF-Capacity-12.png │ ├── UPF-Capacity-2.png │ ├── UPF-Capacity-3.png │ ├── UPF-Capacity-4.png │ ├── UPF-Capacity-5.png │ ├── UPF-Capacity-6.png │ ├── UPF-Capacity-7.png │ ├── UPF-Capacity-8.png │ ├── UPF-Capacity-9.png │ ├── UPF-Capacity.png │ ├── add-deploy-onlinebout-select.png │ ├── add-deployment-selection.png │ ├── approve-selection.png │ ├── external-bp-repos.png │ ├── flux-controller-selection.png │ ├── free5gc-cp-1.png │ ├── free5gc-cp-2.png │ ├── free5gc-cp-3.png │ ├── free5gc-cp-4.png │ ├── free5gc-cp-5.png │ ├── free5gc-cp-6.png │ ├── gitea-porch.png │ ├── helm-to-operator-codegen-sdk-flow-diagram.jpg │ ├── helmrepo-onlineboutique-ref.png │ ├── nephio-deployment.png │ ├── nephio-overview.png │ ├── nephio-pkgs-onlineboutique-show.png │ ├── nephio-r1-5g-network.png │ ├── nephio-r2-5g-network.png │ ├── nephio-r2-deployment-diagram.png │ ├── nephio-ui-edge02-deployment.png │ ├── package-ancestry.png │ ├── package-lifecycle.png │ ├── propose-selection.png │ └── select-create-deployment.png └── tox.ini /.github/workflows/check-links-md.yml: -------------------------------------------------------------------------------- 1 | name: "Check links of plain md files" 2 | 3 | on: 4 | pull_request: 5 | workflow_dispatch: 6 | 7 | jobs: 8 | docs: 9 | runs-on: ubuntu-22.04 10 | steps: 11 | - name: Check out repository code 12 | uses: actions/checkout@v4 13 | - name: Verify linkspector config 14 | run: | 15 | cat .linkspector.yml 16 | - name: Run linkspector 17 | uses: umbrelladocs/action-linkspector@v1.3.4 18 | with: 19 | fail_on_error: true 20 | -------------------------------------------------------------------------------- /.github/workflows/proofreading-vale.yml: -------------------------------------------------------------------------------- 1 | name: reviewdog 2 | on: 3 | pull_request: 4 | workflow_dispatch: 5 | 6 | env: 7 | REVIEWDOG_GITHUB_API_TOKEN: ${{secrets.VALE_GITHUB_TOKEN}} 8 | 9 | jobs: 10 | vale: 11 | name: runner / vale 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 16 | 17 | - name: Harden Runner 18 | uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 19 | with: 20 | egress-policy: audit 21 | - name: Install prerequisites 22 | run: | 23 | sudo apt-get --allow-releaseinfo-change update -y && sudo apt-get install -y docutils 24 | env 25 | - name: Run Vale 26 | uses: errata-ai/vale-action@91ac403e8d26f5aa1b3feaa86ca63065936a85b6 # reviewdog 27 | continue-on-error: true 28 | with: 29 | files: '["content", "README.md"]' 30 | # github-pr-check, github-pr-review, github-check 31 | # more info on these: https://github.com/reviewdog/reviewdog#reporters 32 | reporter: github-pr-check 33 | fail_on_error: false 34 | filter_mode: nofilter 35 | token: ${{secrets.VALE_GITHUB_TOKEN}} 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Tox environments 2 | .idea 3 | .DS_Store 4 | .$* 5 | 6 | # Spell checker 7 | *.dic 8 | 9 | # Hugo 10 | .hugo* 11 | resources/ 12 | public/ 13 | 14 | # nodejs 15 | package-lock.json 16 | node_modules/ -------------------------------------------------------------------------------- /.linkspector.yml: -------------------------------------------------------------------------------- 1 | dirs: 2 | - . 3 | useGitIgnore: true 4 | 5 | aliveStatusCodes: 6 | - 200 7 | - 201 8 | - 204 9 | - 302 10 | - 304 11 | 12 | ignorePatterns: 13 | - pattern: "^http://localhost.*$" 14 | - pattern: "^http://HOSTNAME:PORT.*$" 15 | - pattern: "172\\.18\\.255\\.200" 16 | - pattern: "https://\\*kpt\\*\\.dev/" 17 | - pattern: "https://my-gitlab\\.com/joe\\.bloggs/blueprints\\.git" 18 | - pattern: "http://172\\.18\\.0\\.200:3000/nephio/" 19 | - pattern: "https://www\\.gnu\\.org/" 20 | - pattern: "https://stackoverflow.com/questions/.*" 21 | - pattern: "https://www.npmjs.com/.*" 22 | - pattern: "https://travis-ci.org/.*" 23 | - pattern: "https://containerlab\\.dev.*" 24 | - pattern: "https://docs\\.google\\.com/.*" 25 | - pattern: "https://github\\.com/nephio-project/porch/releases/download/.*/porchctl_.*_linux_amd64\\.tar\\.gz" 26 | - pattern: "https://kubernetes\\.io/.*" 27 | 28 | 29 | 30 | 31 | replacementPatterns: 32 | - pattern: ".md#.*$" 33 | replacement: ".md" 34 | -------------------------------------------------------------------------------- /.spellcheck.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # SPDX-license-identifier: CC-BY-4.0 3 | # Copyright contributors to the Nephio Project 4 | 5 | matrix: 6 | - name: markdown 7 | dictionary: 8 | wordlists: 9 | - .wordlist.txt 10 | pipeline: 11 | - pyspelling.filters.markdown: 12 | sources: 13 | - '**/*.md' 14 | aspell: 15 | ignore-case: true 16 | -------------------------------------------------------------------------------- /.textlintrc: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "terminology": { 4 | "defaultTerms": true, 5 | // List of terms 6 | "terms": [ 7 | ["repo\\b", "repository"] 8 | ] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.vale.ini: -------------------------------------------------------------------------------- 1 | # Vale is an open-source, command-line tool that brings your editorial style guide to life. 2 | # source: https://vale.sh 3 | 4 | # Styles are stored in the .vale folder 5 | StylesPath = .vale 6 | 7 | # Configured styles can be downloaded with the command: vale sync 8 | Packages = proselint, alex, Hugo 9 | # Alert suggestions, warnings and alerts 10 | MinAlertLevel = suggestion 11 | 12 | # Configure a dictionary specific to Nephio 13 | Vocab = Nephio 14 | SkippedScopes = iframe 15 | 16 | [*.md] 17 | BasedOnStyles = Vale, proselint, alex 18 | 19 | # based on https://github.com/errata-ai/Hugo/blob/main/Hugo/.vale.ini 20 | # Exclude `{{< ... >}}`, `{{% ... %}}`, [Who]({{< ... >}}) 21 | TokenIgnores = ({{[%<] .* [%>]}}.*?{{[%<] ?/.* [%>]}}), \ 22 | (\[.+\]\({{< .+ >}}\)), \ 23 | [^\S\r\n]({{[%<] \w+ .+ [%>]}})\s, \ 24 | [^\S\r\n]({{[%<](?:/\*) .* (?:\*/)[%>]}})\s 25 | 26 | # Exclude `{{< myshortcode `This is some HTML, ... >}}` 27 | BlockIgnores = (?sm)^({{[%<] \w+ [^{]*?\s[%>]}})\n$, \ 28 | (?s) *({{< highlight [^>]* ?>}}.*?{{< ?/ ?highlight >}}) 29 | 30 | -------------------------------------------------------------------------------- /.vale/.vale-config/2-Hugo.ini: -------------------------------------------------------------------------------- 1 | [*.md] 2 | # Exclude `{{< ... >}}`, `{{% ... %}}`, [Who]({{< ... >}}) 3 | TokenIgnores = ({{[%<] .* [%>]}}.*?{{[%<] ?/.* [%>]}}), \ 4 | (\[.+\]\({{< .+ >}}\)), \ 5 | ({{[%<] .+ [%>]}}) 6 | 7 | # Exclude `{{< myshortcode `This is some HTML, ... >}}` 8 | BlockIgnores = (?sm)^({{[%<] [^{]*? [%>]}})\n$, \ 9 | (?s) *({{< highlight [^>]* ?>}}.*?{{< ?/ ?highlight >}}), \ 10 | ({{[%<] .+ [%>]}}) 11 | -------------------------------------------------------------------------------- /.vale/alex/Condescending.yml: -------------------------------------------------------------------------------- 1 | --- 2 | extends: existence 3 | message: Using '%s' may come across as condescending. 4 | link: https://css-tricks.com/words-avoid-educational-writing/ 5 | level: error 6 | ignorecase: true 7 | tokens: 8 | - obvious 9 | - obviously 10 | - simple 11 | - simply 12 | - easy 13 | - easily 14 | - of course 15 | - clearly 16 | - everyone knows 17 | -------------------------------------------------------------------------------- /.vale/alex/Gendered.yml: -------------------------------------------------------------------------------- 1 | --- 2 | extends: substitution 3 | message: "Consider using '%s' instead of '%s'." 4 | ignorecase: true 5 | level: warning 6 | action: 7 | name: replace 8 | swap: 9 | ancient man: ancient civilization|ancient people 10 | authoress: author|writer 11 | average housewife: average consumer|average household|average homemaker 12 | average man: average person 13 | average working man: average wage earner|average taxpayer 14 | aviatrix: aviator 15 | bitch: whine|complain|cry 16 | bitching: whining|complaining|crying 17 | brotherhood of man: the human family 18 | calendar girl: model 19 | call girl: escort|prostitute|sex worker 20 | churchman: cleric|practicing Christian|pillar of the Church 21 | english master: english coordinator|senior teacher of english 22 | englishmen: the english 23 | executrix: executor 24 | father of *: founder of 25 | fellowship: camaraderie|community|organization 26 | founding father: the founders|founding leaders|forebears 27 | frenchmen: french|the french 28 | freshman: first-year student|fresher 29 | freshwoman: first-year student|fresher 30 | housemaid: house worker|domestic help 31 | housewife: homemaker|homeworker 32 | housewives: homemakers|homeworkers 33 | industrial man: industrial civilization|industrial people 34 | lady doctor: doctor 35 | ladylike: courteous|cultured 36 | leading lady: lead 37 | like a man: resolutely|bravely 38 | mad man: fanatic|zealot|enthusiast 39 | mad men: fanatics|zealots|enthusiasts 40 | madman: fanatic|zealot|enthusiast 41 | madmen: fanatics|zealots|enthusiasts 42 | maiden: virgin 43 | maiden flight: first flight 44 | maiden name: birth name 45 | maiden race: first race 46 | maiden speech: first speech 47 | maiden voyage: first voyage 48 | man a desk: staff a desk 49 | man enough: strong enough 50 | man hour: staff hour|hour of work 51 | man hours: staff hours|hours of work|hours of labor|hours 52 | man in the street: ordinary citizen|typical person|average person 53 | man of action: dynamo 54 | man of letters: scholar|writer|literary figure 55 | man of the land: farmer|rural worker|grazier|landowner|rural community|country people|country 56 | folk 57 | man of the world: sophisticate 58 | man sized task: a demanding task|a big job 59 | man the booth: staff the booth 60 | man the phones: answer the phones 61 | manhour: staff hour|hour of work 62 | manhours: staff hours|hours of work|hours of labor|hours 63 | mankind: humankind 64 | manmade: manufactured|artificial|synthetic|machine-made|constructed 65 | manned: staffed|crewed|piloted 66 | manpower: human resources|workforce|personnel|staff|labor|personnel|labor force|staffing|combat 67 | personnel 68 | mans best friend: a faithful dog 69 | mansized task: a demanding task|a big job 70 | master copy: pass key|original 71 | master key: pass key|original 72 | master of ceremonies: emcee|moderator|convenor 73 | master plan: grand scheme|guiding principles 74 | master the art: become skilled 75 | masterful: skilled|authoritative|commanding 76 | mastermind: genius|creator|instigator|oversee|launch|originate 77 | masterpiece: "work of genius|chef d\u2019oeuvre" 78 | masterplan: vision|comprehensive plan 79 | masterstroke: trump card|stroke of genius 80 | men of science: scientists 81 | midwife: birthing nurse 82 | miss\.: ms. 83 | moan: whine|complain|cry 84 | moaning: whining|complaining|crying 85 | modern man: modern civilization|modern people 86 | motherly: loving|warm|nurturing 87 | mrs\.: ms. 88 | no mans land: unoccupied territory|wasteland|deathtrap 89 | office girls: administrative staff 90 | oneupmanship: upstaging|competitiveness 91 | poetess: poet 92 | railwayman: railway worker 93 | sportsmanlike: fair|sporting 94 | sportsmanship: fairness|good humor|sense of fair play 95 | statesman like: diplomatic 96 | statesmanlike: diplomatic 97 | stockman: cattle worker|farmhand|drover 98 | tax man: tax commissioner|tax office|tax collector 99 | tradesmans entrance: service entrance 100 | unmanned: robotic|automated 101 | usherette: usher 102 | wife beater: tank top|sleeveless undershirt 103 | wifebeater: tank top|sleeveless undershirt 104 | woman lawyer: lawyer 105 | woman painter: painter 106 | working mother: wage or salary earning woman|two-income family 107 | working wife: wage or salary earning woman|two-income family 108 | workmanship: quality construction|expertise 109 | -------------------------------------------------------------------------------- /.vale/alex/LGBTQ.yml: -------------------------------------------------------------------------------- 1 | --- 2 | extends: substitution 3 | message: Consider using '%s' instead of '%s'. 4 | ignorecase: true 5 | level: warning 6 | action: 7 | name: replace 8 | swap: 9 | bathroom bill: non-discrimination law|non-discrimination ordinance 10 | bi: bisexual 11 | biologically female: assigned female at birth|designated female at birth 12 | biologically male: assigned male at birth|designated male at birth 13 | born a man: assigned male at birth|designated male at birth 14 | born a woman: assigned female at birth|designated female at birth 15 | dyke: gay 16 | fag: gay 17 | faggot: gay 18 | gay agenda: gay issues 19 | gay lifestyle: gay lives|gay/lesbian lives 20 | gay rights: equal rights|civil rights for gay people 21 | gender pronoun: pronoun|pronouns 22 | gender pronouns: pronoun|pronouns 23 | genetically female: assigned female at birth|designated female at birth 24 | genetically male: assigned male at birth|designated male at birth 25 | hermaphrodite: person who is intersex|person|intersex person 26 | hermaphroditic: intersex 27 | heshe: transgender person|person 28 | homo: gay 29 | homosexual: gay|gay man|lesbian|gay person/people 30 | homosexual agenda: gay issues 31 | homosexual couple: couple 32 | homosexual lifestyle: gay lives|gay/lesbian lives 33 | homosexual marriage: gay marriage|same-sex marriage 34 | homosexual relations: relationship 35 | homosexual relationship: relationship 36 | preferred pronoun: pronoun|pronouns 37 | preferred pronouns: pronoun|pronouns 38 | pseudo hermaphrodite: person who is intersex|person|intersex person 39 | pseudo hermaphroditic: intersex 40 | pseudohermaphrodite: person who is intersex|person|intersex person 41 | pseudohermaphroditic: intersex 42 | sex change: transition|gender confirmation surgery 43 | sex change operation: sex reassignment surgery|gender confirmation surgery 44 | sexchange: transition|gender confirmation surgery 45 | sexual preference: sexual orientation|orientation 46 | she male: transgender person|person 47 | shehe: transgender person|person 48 | shemale: transgender person|person 49 | sodomite: gay 50 | special rights: equal rights|civil rights for gay people 51 | tranny: transgender 52 | transgendered: transgender 53 | transgenderism: being transgender|the movement for transgender equality 54 | transgenders: transgender people 55 | transvestite: cross-dresser 56 | -------------------------------------------------------------------------------- /.vale/alex/Press.yml: -------------------------------------------------------------------------------- 1 | --- 2 | extends: substitution 3 | message: Consider using '%s' instead of '%s'. 4 | ignorecase: true 5 | level: warning 6 | action: 7 | name: replace 8 | swap: 9 | islamist: muslim|person of Islamic faith|fanatic|zealot|follower of islam|follower 10 | of the islamic faith 11 | islamists: muslims|people of Islamic faith|fanatics|zealots 12 | -------------------------------------------------------------------------------- /.vale/alex/ProfanityMaybe.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: Reconsider using '%s', it may be profane. 3 | level: warning 4 | ignorecase: true 5 | tokens: 6 | - abbo 7 | - abid 8 | - abo 9 | - abortion 10 | - abuse 11 | - addict 12 | - addicts 13 | - alla 14 | - anal 15 | - analsex 16 | - anus 17 | - areola 18 | - athletesfoot 19 | - attack 20 | - australian 21 | - babe 22 | - banging 23 | - bastard 24 | - beastality 25 | - beastial 26 | - beastiality 27 | - bicurious 28 | - bitch 29 | - bitches 30 | - blackman 31 | - blacks 32 | - bondage 33 | - boob 34 | - boobs 35 | - "bounty bar" 36 | - "bounty bars" 37 | - bountybar 38 | - brothel 39 | - buttplug 40 | - clit 41 | - clitoris 42 | - cocaine 43 | - cock 44 | - coitus 45 | - condom 46 | - copulate 47 | - cra5h 48 | - crack 49 | - cracker 50 | - crackpipe 51 | - crotch 52 | - cunilingus 53 | - cunillingus 54 | - cybersex 55 | - damn 56 | - damnation 57 | - defecate 58 | - demon 59 | - devil 60 | - devilworshipper 61 | - dick 62 | - dike 63 | - dildo 64 | - drug 65 | - drunk 66 | - drunken 67 | - dyke 68 | - ejaculate 69 | - ejaculated 70 | - ejaculating 71 | - ejaculation 72 | - enema 73 | - erection 74 | - excrement 75 | - fag 76 | - fart 77 | - farted 78 | - farting 79 | - feces 80 | - felatio 81 | - fetish 82 | - fingerfood 83 | - flasher 84 | - flatulence 85 | - fondle 86 | - footaction 87 | - foreskin 88 | - foursome 89 | - fourtwenty 90 | - fruitcake 91 | - gable 92 | - genital 93 | - gob 94 | - god 95 | - gonzagas 96 | - goy 97 | - goyim 98 | - groe 99 | - gross 100 | - grostulation 101 | - gub 102 | - guinea 103 | - guineas 104 | - guizi 105 | - hamas 106 | - hebephila 107 | - hebephile 108 | - hebephiles 109 | - hebephilia 110 | - hebephilic 111 | - heroin 112 | - herpes 113 | - hiv 114 | - homicide 115 | - horney 116 | - ike 117 | - ikes 118 | - ikey 119 | - illegals 120 | - incest 121 | - intercourse 122 | - interracial 123 | - italiano 124 | - jerries 125 | - jerry 126 | - jesus 127 | - jesuschrist 128 | - jihad 129 | - kink 130 | - kinky 131 | - knockers 132 | - kock 133 | - kotex 134 | - kraut 135 | - ky 136 | - lactate 137 | - lapdance 138 | - libido 139 | - licker 140 | - liquor 141 | - lolita 142 | - lsd 143 | - lynch 144 | - mafia 145 | - marijuana 146 | - meth 147 | - mick 148 | - molest 149 | - molestation 150 | - molester 151 | - molestor 152 | - murder 153 | - narcotic 154 | - nazi 155 | - necro 156 | - nigerian 157 | - nigerians 158 | - nipple 159 | - nipplering 160 | - nook 161 | - nooner 162 | - nude 163 | - nuke 164 | - nymph 165 | - oral 166 | - orgasm 167 | - orgies 168 | - orgy 169 | - paddy 170 | - paederastic 171 | - paederasts 172 | - paederasty 173 | - pearlnecklace 174 | - peck 175 | - pecker 176 | - pederastic 177 | - pederasts 178 | - pederasty 179 | - pedophile 180 | - pedophiles 181 | - pedophilia 182 | - pedophilic 183 | - pee 184 | - peepshow 185 | - pendy 186 | - penetration 187 | - penile 188 | - penis 189 | - penises 190 | - penthouse 191 | - phonesex 192 | - pistol 193 | - pixie 194 | - pixy 195 | - playboy 196 | - playgirl 197 | - porn 198 | - pornflick 199 | - porno 200 | - pornography 201 | - prostitute 202 | - protestant 203 | - pube 204 | - pubic 205 | - pussy 206 | - pussycat 207 | - queer 208 | - racist 209 | - radical 210 | - radicals 211 | - randy 212 | - rape 213 | - raped 214 | - raper 215 | - rapist 216 | - rectum 217 | - ribbed 218 | - satan 219 | - scag 220 | - scat 221 | - screw 222 | - scrotum 223 | - scum 224 | - semen 225 | - septic 226 | - septics 227 | - sex 228 | - sexhouse 229 | - sextoy 230 | - sextoys 231 | - sexual 232 | - sexually 233 | - sexy 234 | - shag 235 | - shinola 236 | - shit 237 | - slaughter 238 | - smack 239 | - snatch 240 | - sniggers 241 | - sodom 242 | - sodomite 243 | - spade 244 | - spank 245 | - sperm 246 | - stagg 247 | - stiffy 248 | - strapon 249 | - stroking 250 | - suck 251 | - suicide 252 | - swallow 253 | - swastika 254 | - syphilis 255 | - tantra 256 | - teat 257 | - terrorist 258 | - testicle 259 | - testicles 260 | - threesome 261 | - tinkle 262 | - tit 263 | - tits 264 | - tnt 265 | - torture 266 | - tramp 267 | - trap 268 | - trisexual 269 | - trots 270 | - turd 271 | - uterus 272 | - vagina 273 | - vaginal 274 | - vibrator 275 | - vulva 276 | - whit 277 | - whites 278 | - willy 279 | - xtc 280 | - xxx 281 | - yankee 282 | - yankees -------------------------------------------------------------------------------- /.vale/alex/ProfanityUnlikely.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: Be careful with '%s', it’s profane in some cases. 3 | level: warning 4 | ignorecase: true 5 | tokens: 6 | - adult 7 | - africa 8 | - allah 9 | - amateur 10 | - angie 11 | - angry 12 | - arab 13 | - arabs 14 | - aroused 15 | - assassin 16 | - assassinate 17 | - assassination 18 | - assault 19 | - attack 20 | - babies 21 | - backdoor 22 | - backseat 23 | - banana 24 | - bananas 25 | - baptist 26 | - bast 27 | - beast 28 | - beaver 29 | - bi 30 | - bigger 31 | - bisexual 32 | - blackout 33 | - blind 34 | - blow 35 | - bomb 36 | - bombers 37 | - bombing 38 | - bombs 39 | - bomd 40 | - boom 41 | - bosch 42 | - bra 43 | - breast 44 | - brownie 45 | - brownies 46 | - buffy 47 | - burn 48 | - butt 49 | - cancer 50 | - catholic 51 | - catholics 52 | - cemetery 53 | - childrens 54 | - chin 55 | - christ 56 | - christian 57 | - church 58 | - cigarette 59 | - cigs 60 | - cocktail 61 | - coconut 62 | - coconuts 63 | - color 64 | - colored 65 | - coloured 66 | - communist 67 | - conservative 68 | - conspiracy 69 | - corruption 70 | - crabs 71 | - crash 72 | - creamy 73 | - criminal 74 | - criminals 75 | - dead 76 | - death 77 | - deposit 78 | - desire 79 | - destroy 80 | - deth 81 | - die 82 | - died 83 | - dies 84 | - dirty 85 | - disease 86 | - diseases 87 | - disturbed 88 | - doom 89 | - ecstacy 90 | - enemy 91 | - erect 92 | - escort 93 | - ethiopian 94 | - ethnic 95 | - executioner 96 | - explosion 97 | - failed 98 | - failure 99 | - fairies 100 | - fairy 101 | - faith 102 | - fat 103 | - fear 104 | - fight 105 | - filipina 106 | - filipino 107 | - fire 108 | - firing 109 | - fore 110 | - fraud 111 | - funeral 112 | - fungus 113 | - gay 114 | - gin 115 | - girls 116 | - gun 117 | - harder 118 | - harem 119 | - headlights 120 | - hell 121 | - henhouse 122 | - heterosexual 123 | - hijack 124 | - hijacker 125 | - hijacking 126 | - hole 127 | - honk 128 | - hook 129 | - horn 130 | - hostage 131 | - hummer 132 | - hun 133 | - huns 134 | - husky 135 | - hustler 136 | - illegal 137 | - israel 138 | - israeli 139 | - israels 140 | - itch 141 | - jade 142 | - jerry 143 | - jew 144 | - jewish 145 | - joint 146 | - jugs 147 | - kid 148 | - kill 149 | - killed 150 | - killer 151 | - killing 152 | - kills 153 | - kimchi 154 | - laid 155 | - latin 156 | - lesbian 157 | - liberal 158 | - lies 159 | - lingerie 160 | - lotion 161 | - lucifer 162 | - mad 163 | - mideast 164 | - minority 165 | - moles 166 | - mormon 167 | - muslim 168 | - naked 169 | - nasty 170 | - niger 171 | - niggardly 172 | - oreo 173 | - oreos 174 | - osama 175 | - palestinian 176 | - panties 177 | - penthouse 178 | - period 179 | - pot 180 | - poverty 181 | - premature 182 | - primetime 183 | - propaganda 184 | - que 185 | - rabbi 186 | - racial 187 | - redlight 188 | - refugee 189 | - reject 190 | - remains 191 | - republican 192 | - roach 193 | - robber 194 | - rump 195 | - servant 196 | - shoot 197 | - shooting 198 | - showtime 199 | - sick 200 | - slant 201 | - slav 202 | - slime 203 | - slope 204 | - slopes 205 | - snigger 206 | - sniggered 207 | - sniggering 208 | - sniggers 209 | - sniper 210 | - snot 211 | - sob 212 | - sos 213 | - soviet 214 | - spa 215 | - stroke 216 | - sweetness 217 | - taboo 218 | - tampon 219 | - terror 220 | - toilet 221 | - tongue 222 | - transexual 223 | - transsexual 224 | - trojan 225 | - uk 226 | - urinary 227 | - urinate 228 | - urine 229 | - vatican 230 | - vietcong 231 | - violence 232 | - virgin 233 | - weapon 234 | - whiskey 235 | - womens 236 | -------------------------------------------------------------------------------- /.vale/alex/README.md: -------------------------------------------------------------------------------- 1 | Based on [alex](https://github.com/get-alex/alex). 2 | 3 | > Catch insensitive, inconsiderate writing 4 | 5 | ``` 6 | (The MIT License) 7 | 8 | Copyright (c) 2015 Titus Wormer 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in 18 | all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | THE SOFTWARE. 27 | ``` 28 | -------------------------------------------------------------------------------- /.vale/alex/Race.yml: -------------------------------------------------------------------------------- 1 | --- 2 | extends: substitution 3 | message: Consider using '%s' instead of '%s'. 4 | ignorecase: true 5 | level: warning 6 | action: 7 | name: replace 8 | swap: 9 | Gipsy: Nomad|Traveler|Roma|Romani 10 | Indian country: enemy territory 11 | animal spirit: favorite|inspiration|personal interest|personality type 12 | black list: blocklist|wronglist|banlist|deny list 13 | blacklist: blocklist|wronglist|banlist|deny list 14 | blacklisted: blocklisted|wronglisted|banlisted|deny-listed 15 | blacklisting: blocklisting|wronglisting|banlisting|deny-listing 16 | bugreport: bug report|snapshot 17 | circle the wagons: defend 18 | dream catcher: favorite|inspiration|personal interest|personality type 19 | eskimo: Inuit 20 | eskimos: Inuits 21 | ghetto: projects|urban 22 | goy: a person who is not Jewish|not Jewish 23 | goyim: a person who is not Jewish|not Jewish 24 | goyum: a person who is not Jewish|not Jewish 25 | grandfather clause: legacy policy|legacy clause|deprecation policy 26 | grandfather policy: legacy policy|legacy clause|deprecation policy 27 | grandfathered: deprecated 28 | grandfathering: deprecate 29 | gyp: Nomad|Traveler|Roma|Romani 30 | gyppo: Nomad|Traveler|Roma|Romani 31 | gypsy: Nomad|Traveler|Roma|Romani 32 | hymie: Jewish person 33 | indian give: "go back on one\u2019s offer" 34 | indian giver: "go back on one\u2019s offer" 35 | japs: Japanese person|Japanese people 36 | jump the reservation: disobey|endure|object to|oppose|resist 37 | latina: Latinx 38 | latino: Latinx 39 | long time no hear: "I haven\u2019t seen you in a long time|it\u2019s been a long\ 40 | \ time" 41 | long time no see: "I haven\u2019t seen you in a long time|it\u2019s been a long\ 42 | \ time" 43 | master: primary|hub|reference 44 | masters: primaries|hubs|references 45 | mexican: Latinx 46 | natives are becoming restless: dissatisfied|frustrated 47 | natives are getting restless: dissatisfied|frustrated 48 | natives are growing restless: dissatisfied|frustrated 49 | natives are restless: dissatisfied|frustrated 50 | non white: person of color|people of color 51 | nonwhite: person of color|people of color 52 | off reserve: disobey|endure|object to|oppose|resist 53 | off the reservation: disobey|endure|object to|oppose|resist 54 | on the warpath: defend 55 | oriental: Asian person 56 | orientals: Asian people 57 | pinays: Filipinos|Filipino people 58 | pinoys: Filipinos|Filipino people 59 | pocahontas: Native American 60 | pow wow: conference|gathering|meeting 61 | powwow: conference|gathering|meeting 62 | primitive: simple|indigenous|hunter-gatherer 63 | red indian: Native American 64 | red indians: Native American People 65 | redskin: Native American 66 | redskins: Native American People 67 | sand niggers: Arabs|Middle Eastern People 68 | savage: simple|indigenous|hunter-gatherer 69 | shlomo: Jewish person 70 | shyster: Jewish person 71 | sophisticated culture: complex culture 72 | sophisticated technology: complex technology 73 | spade: a Black person 74 | spirit animal: favorite|inspiration|personal interest|personality type 75 | stone age: simple|indigenous|hunter-gatherer 76 | too many chiefs: too many chefs in the kitchen|too many cooks spoil the broth 77 | totem: favorite|inspiration|personal interest|personality type 78 | towel heads: Arabs|Middle Eastern People 79 | tribe: society|community 80 | white list: passlist|alrightlist|safelist|allow list 81 | white space: space|blank 82 | white spaces: space|blank 83 | whitelist: passlist|alrightlist|safelist|allow list 84 | whitelisted: passlisted|alrightlisted|safelisted|allow-listed 85 | whitelisting: passlisting|alrightlisting|safelisting|allow-listing 86 | whitespace: space|blank 87 | whitespaces: space|blank 88 | -------------------------------------------------------------------------------- /.vale/alex/Suicide.yml: -------------------------------------------------------------------------------- 1 | --- 2 | extends: substitution 3 | message: When referring to a person, consider using '%s' instead of '%s'. 4 | ignorecase: true 5 | level: warning 6 | action: 7 | name: replace 8 | swap: 9 | commit suicide: die by suicide 10 | committed suicide: died by suicide 11 | complete suicide: die by suicide 12 | completed suicide: died by suicide 13 | epidemic of suicides: rise in suicides 14 | failed attempt: suicide attempt|attempted suicide 15 | failed suicide: suicide attempt|attempted suicide 16 | hang: the app froze|the app stopped responding|the app stopped responding to events|the 17 | app became unresponsive 18 | hanged: the app froze|the app stopped responding|the app stopped responding to events|the 19 | app became unresponsive 20 | successful suicide: die by suicide 21 | suicide epidemic: rise in suicides 22 | suicide failure: suicide attempt|attempted suicide 23 | suicide note: a note from the deceased 24 | suicide pact: rise in suicides 25 | -------------------------------------------------------------------------------- /.vale/alex/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "feed": "https://github.com/errata-ai/alex/releases.atom", 3 | "vale_version": ">=1.0.0" 4 | } -------------------------------------------------------------------------------- /.vale/config/vocabularies/Nephio/accept.txt: -------------------------------------------------------------------------------- 1 | # Accepted words (other acronyms must be explained) 2 | amfName 3 | Ansible 4 | Anthos 5 | API 6 | APIs 7 | apiserver 8 | ASN 9 | ASNs 10 | apiVersion 11 | [Aa]utomations 12 | authProvider 13 | [Aa]utoscaling 14 | backtrackVal 15 | [Bb]ool 16 | [Bb]oolean 17 | cabundle 18 | [Cc]onfig 19 | ConfigMap 20 | configsync 21 | Codegen 22 | [Cc]loudified 23 | CNI 24 | Containerlab 25 | CLI 26 | CR 27 | CRs 28 | CRs 29 | CRD 30 | CRDs 31 | Crossplane 32 | CSV 33 | deployer 34 | Dockerfile 35 | Docsy 36 | encodedVal 37 | [Ee]num 38 | [Ee]nums 39 | envtest 40 | [Ee]tcd 41 | [Ee]xecute 42 | [Ee]xecution 43 | Expr 44 | [Ff]anout 45 | func 46 | gcloud 47 | Gitea 48 | GitHub 49 | GitLab 50 | GitOps 51 | golang 52 | Graphviz 53 | GRPC 54 | GVK 55 | GVKs 56 | [Hh]ostname 57 | [Hh]omebrew 58 | html 59 | HTTP 60 | HTTPS 61 | JFrog 62 | JSON 63 | [Kk]pt 64 | [Kk]ptfile 65 | [Kk]ptfiles 66 | kubeadm 67 | Kubebuilder 68 | kubeconfig 69 | kubectl 70 | kubelet 71 | Kubernetes 72 | Kustomization 73 | [Kk]ustomize 74 | kpt fn 75 | kpt-fn 76 | Libvirt 77 | LVMCluster 78 | MacBook 79 | MetalLB 80 | [Nn]amespace 81 | Nephio 82 | nerdctl 83 | Netlify 84 | networkName 85 | NF 86 | NFDeploy 87 | NFDeployment 88 | NFs 89 | [Mm]akefile 90 | [Mm]akefiles 91 | Multus 92 | [Mm]ultivendor 93 | [Mm]ulticloud 94 | [Mm]utator 95 | mgmt 96 | Nginx 97 | IdP 98 | [Ii]ntercluster 99 | interdependency 100 | OAuth 101 | oc 102 | OCI 103 | OIDC 104 | [Oo]nboarding 105 | [Oo]nboarded 106 | Okta 107 | OpenID 108 | objectSelector 109 | [Pp]arameterization 110 | [Pp]ackageVariant 111 | [Pp]ackageRevision 112 | [Pp]ackage[Nn]ames 113 | params 114 | parameterRef 115 | passwordless 116 | [Pp]kgserver 117 | [Pp]luggable 118 | Podman 119 | [Pp]orch 120 | [Pp]orchctl 121 | Postgres 122 | PVC 123 | PVCs 124 | [Rr]emoveKeys 125 | RepositorySelector 126 | repoTest 127 | [Rr]ebase 128 | [Rr]pkg 129 | RootSync 130 | [Rr]ollout 131 | sbi 132 | SDK 133 | starlark 134 | stdout 135 | stderr 136 | [Ss]udo 137 | [Ss]ubpackage 138 | SSH 139 | [Ss]pecializer 140 | [Ss]pecializers 141 | TLS 142 | [Tt]riage 143 | [Tt]ko 144 | [Tt]oolchain 145 | [Uu]buntu 146 | userid 147 | UI 148 | UIs 149 | URI 150 | URIs 151 | upsertRepo 152 | upstreamlock 153 | [Uu]ntar 154 | [Uu]ndeploy 155 | [Uu]tils 156 | validator 157 | vCPU 158 | VirtualBox 159 | VLAN 160 | VLANs 161 | VM 162 | VMs 163 | VS Code 164 | vSphere 165 | wantErr 166 | WebUI 167 | xApps 168 | XXFDeployment 169 | YAML 170 | 171 | # Nephio contributors mentioned in the docs 172 | Tal 173 | Liron -------------------------------------------------------------------------------- /.vale/proselint/Airlinese.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is airlinese." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - enplan(?:e|ed|ing|ement) 7 | - deplan(?:e|ed|ing|ement) 8 | - taking off momentarily 9 | -------------------------------------------------------------------------------- /.vale/proselint/AnimalLabels.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Consider using '%s' instead of '%s'." 3 | level: error 4 | action: 5 | name: replace 6 | swap: 7 | (?:bull|ox)-like: taurine 8 | (?:calf|veal)-like: vituline 9 | (?:crow|raven)-like: corvine 10 | (?:leopard|panther)-like: pardine 11 | bird-like: avine 12 | centipede-like: scolopendrine 13 | crab-like: cancrine 14 | crocodile-like: crocodiline 15 | deer-like: damine 16 | eagle-like: aquiline 17 | earthworm-like: lumbricine 18 | falcon-like: falconine 19 | ferine: wild animal-like 20 | fish-like: piscine 21 | fox-like: vulpine 22 | frog-like: ranine 23 | goat-like: hircine 24 | goose-like: anserine 25 | gull-like: laridine 26 | hare-like: leporine 27 | hawk-like: accipitrine 28 | hippopotamus-like: hippopotamine 29 | lizard-like: lacertine 30 | mongoose-like: viverrine 31 | mouse-like: murine 32 | ostrich-like: struthionine 33 | peacock-like: pavonine 34 | porcupine-like: hystricine 35 | rattlesnake-like: crotaline 36 | sable-like: zibeline 37 | sheep-like: ovine 38 | shrew-like: soricine 39 | sparrow-like: passerine 40 | swallow-like: hirundine 41 | swine-like: suilline 42 | tiger-like: tigrine 43 | viper-like: viperine 44 | vulture-like: vulturine 45 | wasp-like: vespine 46 | wolf-like: lupine 47 | woodpecker-like: picine 48 | zebra-like: zebrine 49 | -------------------------------------------------------------------------------- /.vale/proselint/Annotations.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' left in text." 3 | ignorecase: false 4 | level: error 5 | tokens: 6 | - XXX 7 | - FIXME 8 | - NOTE 9 | - TODO 10 | - Todo 11 | - todo 12 | -------------------------------------------------------------------------------- /.vale/proselint/Apologizing.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Excessive apologizing: '%s'" 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: remove 7 | tokens: 8 | - More research is needed 9 | -------------------------------------------------------------------------------- /.vale/proselint/Archaisms.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is archaic." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - alack 7 | - anent 8 | - begat 9 | - belike 10 | - betimes 11 | - boughten 12 | - brocage 13 | - brokage 14 | - camarade 15 | - chiefer 16 | - chiefest 17 | - Christiana 18 | - completely obsolescent 19 | - cozen 20 | - divers 21 | - deflexion 22 | - fain 23 | - forsooth 24 | - foreclose from 25 | - haply 26 | - howbeit 27 | - illumine 28 | - in sooth 29 | - maugre 30 | - meseems 31 | - methinks 32 | - nigh 33 | - peradventure 34 | - perchance 35 | - saith 36 | - shew 37 | - sistren 38 | - spake 39 | - to wit 40 | - verily 41 | - whilom 42 | - withal 43 | - wot 44 | - enclosed please find 45 | - please find enclosed 46 | - enclosed herewith 47 | - enclosed herein 48 | - inforce 49 | - ex postfacto 50 | - foreclose from 51 | - forewent 52 | - for ever 53 | -------------------------------------------------------------------------------- /.vale/proselint/But.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Do not start a paragraph with a 'but'." 3 | level: error 4 | scope: paragraph 5 | action: 6 | name: remove 7 | tokens: 8 | - ^But 9 | -------------------------------------------------------------------------------- /.vale/proselint/CorporateSpeak.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is corporate speak." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - at the end of the day 7 | - back to the drawing board 8 | - hit the ground running 9 | - get the ball rolling 10 | - low-hanging fruit 11 | - thrown under the bus 12 | - think outside the box 13 | - let's touch base 14 | - get my manager's blessing 15 | - it's on my radar 16 | - ping me 17 | - i don't have the bandwidth 18 | - no brainer 19 | - par for the course 20 | - bang for your buck 21 | - synergy 22 | - move the goal post 23 | - apples to apples 24 | - win-win 25 | - circle back around 26 | - all hands on deck 27 | - take this offline 28 | - drill-down 29 | - elephant in the room 30 | - on my plate 31 | -------------------------------------------------------------------------------- /.vale/proselint/Currency.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Incorrect use of symbols in '%s'." 3 | ignorecase: true 4 | raw: 5 | - \$[\d]* ?(?:dollars|usd|us dollars) 6 | -------------------------------------------------------------------------------- /.vale/proselint/Cursing.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Consider replacing '%s'." 3 | level: error 4 | ignorecase: true 5 | tokens: 6 | - shit 7 | - piss 8 | - fuck 9 | - cunt 10 | - cocksucker 11 | - motherfucker 12 | - tits 13 | - fart 14 | - turd 15 | - twat 16 | -------------------------------------------------------------------------------- /.vale/proselint/DateCase.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: With lowercase letters, the periods are standard. 3 | ignorecase: false 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\d{1,2} ?[ap]m\b' 8 | -------------------------------------------------------------------------------- /.vale/proselint/DateMidnight.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use 'midnight' or 'noon'." 3 | ignorecase: true 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '12 ?[ap]\.?m\.?' 8 | -------------------------------------------------------------------------------- /.vale/proselint/DateRedundancy.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'a.m.' is always morning; 'p.m.' is always night." 3 | ignorecase: true 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\d{1,2} ?a\.?m\.? in the morning' 8 | - '\d{1,2} ?p\.?m\.? in the evening' 9 | - '\d{1,2} ?p\.?m\.? at night' 10 | - '\d{1,2} ?p\.?m\.? in the afternoon' 11 | -------------------------------------------------------------------------------- /.vale/proselint/DateSpacing.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "It's standard to put a space before '%s'" 3 | ignorecase: true 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\d{1,2}[ap]\.?m\.?' 8 | -------------------------------------------------------------------------------- /.vale/proselint/DenizenLabels.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Did you mean '%s'? 3 | ignorecase: false 4 | action: 5 | name: replace 6 | swap: 7 | (?:Afrikaaner|Afrikander): Afrikaner 8 | (?:Hong Kongite|Hong Kongian): Hong Konger 9 | (?:Indianan|Indianian): Hoosier 10 | (?:Michiganite|Michiganian): Michigander 11 | (?:New Hampshireite|New Hampshireman): New Hampshirite 12 | (?:Newcastlite|Newcastleite): Novocastrian 13 | (?:Providencian|Providencer): Providentian 14 | (?:Trentian|Trentonian): Tridentine 15 | (?:Warsawer|Warsawian): Varsovian 16 | (?:Wolverhamptonite|Wolverhamptonian): Wulfrunian 17 | Alabaman: Alabamian 18 | Albuquerquian: Albuquerquean 19 | Anchoragite: Anchorageite 20 | Arizonian: Arizonan 21 | Arkansawyer: Arkansan 22 | Belarusan: Belarusian 23 | Cayman Islander: Caymanian 24 | Coloradoan: Coloradan 25 | Connecticuter: Nutmegger 26 | Fairbanksian: Fairbanksan 27 | Fort Worther: Fort Worthian 28 | Grenadian: Grenadan 29 | Halifaxer: Haligonian 30 | Hartlepoolian: Hartlepudlian 31 | Illinoisian: Illinoisan 32 | Iowegian: Iowan 33 | Leedsian: Leodenisian 34 | Liverpoolian: Liverpudlian 35 | Los Angelean: Angeleno 36 | Manchesterian: Mancunian 37 | Minneapolisian: Minneapolitan 38 | Missouran: Missourian 39 | Monacan: Monegasque 40 | Neopolitan: Neapolitan 41 | New Jerseyite: New Jerseyan 42 | New Orleansian: New Orleanian 43 | Oklahoma Citian: Oklahoma Cityan 44 | Oklahomian: Oklahoman 45 | Saudi Arabian: Saudi 46 | Seattlite: Seattleite 47 | Surinamer: Surinamese 48 | Tallahassean: Tallahasseean 49 | Tennesseean: Tennessean 50 | Trois-Rivièrester: Trifluvian 51 | Utahan: Utahn 52 | Valladolidian: Vallisoletano 53 | -------------------------------------------------------------------------------- /.vale/proselint/Diacritical.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using '%s' instead of '%s'. 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: replace 7 | swap: 8 | beau ideal: beau idéal 9 | boutonniere: boutonnière 10 | bric-a-brac: bric-à-brac 11 | cafe: café 12 | cause celebre: cause célèbre 13 | chevre: chèvre 14 | cliche: cliché 15 | consomme: consommé 16 | coup de grace: coup de grâce 17 | crudites: crudités 18 | creme brulee: crème brûlée 19 | creme de menthe: crème de menthe 20 | creme fraice: crème fraîche 21 | creme fresh: crème fraîche 22 | crepe: crêpe 23 | debutante: débutante 24 | decor: décor 25 | deja vu: déjà vu 26 | denouement: dénouement 27 | facade: façade 28 | fiance: fiancé 29 | fiancee: fiancée 30 | flambe: flambé 31 | garcon: garçon 32 | lycee: lycée 33 | maitre d: maître d 34 | menage a trois: ménage à trois 35 | negligee: négligée 36 | protege: protégé 37 | protegee: protégée 38 | puree: purée 39 | my resume: my résumé 40 | your resume: your résumé 41 | his resume: his résumé 42 | her resume: her résumé 43 | a resume: a résumé 44 | the resume: the résumé 45 | risque: risqué 46 | roue: roué 47 | soiree: soirée 48 | souffle: soufflé 49 | soupcon: soupçon 50 | touche: touché 51 | tete-a-tete: tête-à-tête 52 | voila: voilà 53 | a la carte: à la carte 54 | a la mode: à la mode 55 | emigre: émigré 56 | 57 | # Spanish loanwords 58 | El Nino: El Niño 59 | jalapeno: jalapeño 60 | La Nina: La Niña 61 | pina colada: piña colada 62 | senor: señor 63 | senora: señora 64 | senorita: señorita 65 | 66 | # Portuguese loanwords 67 | acai: açaí 68 | 69 | # German loanwords 70 | doppelganger: doppelgänger 71 | Fuhrer: Führer 72 | Gewurztraminer: Gewürztraminer 73 | vis-a-vis: vis-à-vis 74 | Ubermensch: Übermensch 75 | 76 | # Swedish loanwords 77 | filmjolk: filmjölk 78 | smorgasbord: smörgåsbord 79 | 80 | # Names, places, and companies 81 | Beyonce: Beyoncé 82 | Bronte: Brontë 83 | Champs-Elysees: Champs-Élysées 84 | Citroen: Citroën 85 | Curacao: Curaçao 86 | Lowenbrau: Löwenbräu 87 | Monegasque: Monégasque 88 | Motley Crue: Mötley Crüe 89 | Nescafe: Nescafé 90 | Queensryche: Queensrÿche 91 | Quebec: Québec 92 | Quebecois: Québécois 93 | Angstrom: Ångström 94 | angstrom: ångström 95 | Skoda: Škoda 96 | -------------------------------------------------------------------------------- /.vale/proselint/GenderBias.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using '%s' instead of '%s'. 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: replace 7 | swap: 8 | (?:alumnae|alumni): graduates 9 | (?:alumna|alumnus): graduate 10 | air(?:m[ae]n|wom[ae]n): pilot(s) 11 | anchor(?:m[ae]n|wom[ae]n): anchor(s) 12 | authoress: author 13 | camera(?:m[ae]n|wom[ae]n): camera operator(s) 14 | chair(?:m[ae]n|wom[ae]n): chair(s) 15 | congress(?:m[ae]n|wom[ae]n): member(s) of congress 16 | door(?:m[ae]|wom[ae]n): concierge(s) 17 | draft(?:m[ae]n|wom[ae]n): drafter(s) 18 | fire(?:m[ae]n|wom[ae]n): firefighter(s) 19 | fisher(?:m[ae]n|wom[ae]n): fisher(s) 20 | fresh(?:m[ae]n|wom[ae]n): first-year student(s) 21 | garbage(?:m[ae]n|wom[ae]n): waste collector(s) 22 | lady lawyer: lawyer 23 | ladylike: courteous 24 | landlord: building manager 25 | mail(?:m[ae]n|wom[ae]n): mail carriers 26 | man and wife: husband and wife 27 | man enough: strong enough 28 | mankind: human kind 29 | manmade: manufactured 30 | men and girls: men and women 31 | middle(?:m[ae]n|wom[ae]n): intermediary 32 | news(?:m[ae]n|wom[ae]n): journalist(s) 33 | ombuds(?:man|woman): ombuds 34 | oneupmanship: upstaging 35 | poetess: poet 36 | police(?:m[ae]n|wom[ae]n): police officer(s) 37 | repair(?:m[ae]n|wom[ae]n): technician(s) 38 | sales(?:m[ae]n|wom[ae]n): salesperson or sales people 39 | service(?:m[ae]n|wom[ae]n): soldier(s) 40 | tribes(?:m[ae]n|wom[ae]n): tribe member(s) 41 | waitress: waiter 42 | woman doctor: doctor 43 | woman scientist[s]?: scientist(s) 44 | work(?:m[ae]n|wom[ae]n): worker(s) 45 | -------------------------------------------------------------------------------- /.vale/proselint/GroupTerms.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using '%s' instead of '%s'. 3 | ignorecase: true 4 | action: 5 | name: replace 6 | swap: 7 | (?:bunch|group|pack|flock) of chickens: brood of chickens 8 | (?:bunch|group|pack|flock) of crows: murder of crows 9 | (?:bunch|group|pack|flock) of hawks: cast of hawks 10 | (?:bunch|group|pack|flock) of parrots: pandemonium of parrots 11 | (?:bunch|group|pack|flock) of peacocks: muster of peacocks 12 | (?:bunch|group|pack|flock) of penguins: muster of penguins 13 | (?:bunch|group|pack|flock) of sparrows: host of sparrows 14 | (?:bunch|group|pack|flock) of turkeys: rafter of turkeys 15 | (?:bunch|group|pack|flock) of woodpeckers: descent of woodpeckers 16 | (?:bunch|group|pack|herd) of apes: shrewdness of apes 17 | (?:bunch|group|pack|herd) of baboons: troop of baboons 18 | (?:bunch|group|pack|herd) of badgers: cete of badgers 19 | (?:bunch|group|pack|herd) of bears: sloth of bears 20 | (?:bunch|group|pack|herd) of bullfinches: bellowing of bullfinches 21 | (?:bunch|group|pack|herd) of bullocks: drove of bullocks 22 | (?:bunch|group|pack|herd) of caterpillars: army of caterpillars 23 | (?:bunch|group|pack|herd) of cats: clowder of cats 24 | (?:bunch|group|pack|herd) of colts: rag of colts 25 | (?:bunch|group|pack|herd) of crocodiles: bask of crocodiles 26 | (?:bunch|group|pack|herd) of dolphins: school of dolphins 27 | (?:bunch|group|pack|herd) of foxes: skulk of foxes 28 | (?:bunch|group|pack|herd) of gorillas: band of gorillas 29 | (?:bunch|group|pack|herd) of hippopotami: bloat of hippopotami 30 | (?:bunch|group|pack|herd) of horses: drove of horses 31 | (?:bunch|group|pack|herd) of jellyfish: fluther of jellyfish 32 | (?:bunch|group|pack|herd) of kangeroos: mob of kangeroos 33 | (?:bunch|group|pack|herd) of monkeys: troop of monkeys 34 | (?:bunch|group|pack|herd) of oxen: yoke of oxen 35 | (?:bunch|group|pack|herd) of rhinoceros: crash of rhinoceros 36 | (?:bunch|group|pack|herd) of wild boar: sounder of wild boar 37 | (?:bunch|group|pack|herd) of wild pigs: drift of wild pigs 38 | (?:bunch|group|pack|herd) of zebras: zeal of wild pigs 39 | (?:bunch|group|pack|school) of trout: hover of trout 40 | -------------------------------------------------------------------------------- /.vale/proselint/Hedging.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is hedging." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - I would argue that 7 | - ', so to speak' 8 | - to a certain degree 9 | -------------------------------------------------------------------------------- /.vale/proselint/Hyperbole.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is hyperbolic." 3 | level: error 4 | nonword: true 5 | tokens: 6 | - '[a-z]+[!?]{2,}' 7 | -------------------------------------------------------------------------------- /.vale/proselint/Jargon.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is jargon." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - in the affirmative 7 | - in the negative 8 | - agendize 9 | - per your order 10 | - per your request 11 | - disincentivize 12 | -------------------------------------------------------------------------------- /.vale/proselint/LGBTOffensive.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is offensive. Remove it or consider the context." 3 | ignorecase: true 4 | tokens: 5 | - fag 6 | - faggot 7 | - dyke 8 | - sodomite 9 | - homosexual agenda 10 | - gay agenda 11 | - transvestite 12 | - homosexual lifestyle 13 | - gay lifestyle 14 | -------------------------------------------------------------------------------- /.vale/proselint/LGBTTerms.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Consider using '%s' instead of '%s'." 3 | ignorecase: true 4 | action: 5 | name: replace 6 | swap: 7 | homosexual man: gay man 8 | homosexual men: gay men 9 | homosexual woman: lesbian 10 | homosexual women: lesbians 11 | homosexual people: gay people 12 | homosexual couple: gay couple 13 | sexual preference: sexual orientation 14 | (?:admitted homosexual|avowed homosexual): openly gay 15 | special rights: equal rights 16 | -------------------------------------------------------------------------------- /.vale/proselint/Malapropisms.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is a malapropism." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - the infinitesimal universe 7 | - a serial experience 8 | - attack my voracity 9 | -------------------------------------------------------------------------------- /.vale/proselint/Nonwords.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Consider using '%s' instead of '%s'." 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: replace 7 | swap: 8 | affrontery: effrontery 9 | analyzation: analysis 10 | annoyment: annoyance 11 | confirmant: confirmand 12 | confirmants: confirmands 13 | conversate: converse 14 | crained: cranded 15 | discomforture: discomfort|discomfiture 16 | dispersement: disbursement|dispersal 17 | doubtlessly: doubtless|undoubtedly 18 | forebearance: forbearance 19 | improprietous: improper 20 | inclimate: inclement 21 | inimicable: inimical 22 | irregardless: regardless 23 | minimalize: minimize 24 | minimalized: minimized 25 | minimalizes: minimizes 26 | minimalizing: minimizing 27 | optimalize: optimize 28 | paralyzation: paralysis 29 | pettifogger: pettifog 30 | proprietous: proper 31 | relative inexpense: relatively low price|affordability 32 | seldomly: seldom 33 | thusly: thus 34 | uncategorically: categorically 35 | undoubtably: undoubtedly|indubitably 36 | unequivocable: unequivocal 37 | unmercilessly: mercilessly 38 | unrelentlessly: unrelentingly|relentlessly 39 | -------------------------------------------------------------------------------- /.vale/proselint/Oxymorons.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is an oxymoron." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - amateur expert 7 | - increasingly less 8 | - advancing backwards 9 | - alludes explicitly to 10 | - explicitly alludes to 11 | - totally obsolescent 12 | - completely obsolescent 13 | - generally always 14 | - usually always 15 | - increasingly less 16 | - build down 17 | - conspicuous absence 18 | - exact estimate 19 | - found missing 20 | - intense apathy 21 | - mandatory choice 22 | - organized mess 23 | -------------------------------------------------------------------------------- /.vale/proselint/P-Value.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "You should use more decimal places, unless '%s' is really true." 3 | ignorecase: true 4 | level: suggestion 5 | tokens: 6 | - 'p = 0\.0{2,4}' 7 | -------------------------------------------------------------------------------- /.vale/proselint/RASSyndrome.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is redundant." 3 | level: error 4 | action: 5 | name: edit 6 | params: 7 | - split 8 | - ' ' 9 | - '0' 10 | tokens: 11 | - ABM missile 12 | - ACT test 13 | - ABM missiles 14 | - ABS braking system 15 | - ATM machine 16 | - CD disc 17 | - CPI Index 18 | - GPS system 19 | - GUI interface 20 | - HIV virus 21 | - ISBN number 22 | - LCD display 23 | - PDF format 24 | - PIN number 25 | - RAS syndrome 26 | - RIP in peace 27 | - please RSVP 28 | - SALT talks 29 | - SAT test 30 | - UPC codes 31 | -------------------------------------------------------------------------------- /.vale/proselint/README.md: -------------------------------------------------------------------------------- 1 | Copyright © 2014–2015, Jordan Suchow, Michael Pacer, and Lara A. Ross 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 | 6 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 7 | 8 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 9 | 10 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 11 | 12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 13 | -------------------------------------------------------------------------------- /.vale/proselint/Skunked.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is a bit of a skunked term — impossible to use without issue." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - bona fides 7 | - deceptively 8 | - decimate 9 | - effete 10 | - fulsome 11 | - hopefully 12 | - impassionate 13 | - Thankfully 14 | -------------------------------------------------------------------------------- /.vale/proselint/Spelling.yml: -------------------------------------------------------------------------------- 1 | extends: consistency 2 | message: "Inconsistent spelling of '%s'." 3 | level: error 4 | ignorecase: true 5 | either: 6 | advisor: adviser 7 | centre: center 8 | colour: color 9 | emphasise: emphasize 10 | finalise: finalize 11 | focussed: focused 12 | labour: labor 13 | learnt: learned 14 | organise: organize 15 | organised: organized 16 | organising: organizing 17 | recognise: recognize 18 | -------------------------------------------------------------------------------- /.vale/proselint/Typography.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using the '%s' symbol instead of '%s'. 3 | level: error 4 | nonword: true 5 | swap: 6 | '\.\.\.': … 7 | '\([cC]\)': © 8 | '\(TM\)': ™ 9 | '\(tm\)': ™ 10 | '\([rR]\)': ® 11 | '[0-9]+ ?x ?[0-9]+': × 12 | -------------------------------------------------------------------------------- /.vale/proselint/Uncomparables.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is not comparable" 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: edit 7 | params: 8 | - split 9 | - ' ' 10 | - '1' 11 | raw: 12 | - \b(?:absolutely|most|more|less|least|very|quite|largely|extremely|increasingly|kind of|mildy|hardly|greatly|sort of)\b\s* 13 | tokens: 14 | - absolute 15 | - adequate 16 | - complete 17 | - correct 18 | - certain 19 | - devoid 20 | - entire 21 | - 'false' 22 | - fatal 23 | - favorite 24 | - final 25 | - ideal 26 | - impossible 27 | - inevitable 28 | - infinite 29 | - irrevocable 30 | - main 31 | - manifest 32 | - only 33 | - paramount 34 | - perfect 35 | - perpetual 36 | - possible 37 | - preferable 38 | - principal 39 | - singular 40 | - stationary 41 | - sufficient 42 | - 'true' 43 | - unanimous 44 | - unavoidable 45 | - unbroken 46 | - uniform 47 | - unique 48 | - universal 49 | - void 50 | - whole 51 | -------------------------------------------------------------------------------- /.vale/proselint/Very.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Remove '%s'." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - very 7 | -------------------------------------------------------------------------------- /.vale/proselint/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "jdkato", 3 | "description": "A Vale-compatible implementation of the proselint linter.", 4 | "email": "support@errata.ai", 5 | "lang": "en", 6 | "url": "https://github.com/errata-ai/proselint/releases/latest/download/proselint.zip", 7 | "feed": "https://github.com/errata-ai/proselint/releases.atom", 8 | "issues": "https://github.com/errata-ai/proselint/issues/new", 9 | "license": "BSD-3-Clause", 10 | "name": "proselint", 11 | "sources": [ 12 | "https://github.com/amperser/proselint" 13 | ], 14 | "vale_version": ">=1.0.0", 15 | "coverage": 0.0, 16 | "version": "0.1.0" 17 | } 18 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # SPDX-license-identifier: CC-BY-4.0 2 | # Copyright contributors to the Nephio Project 3 | 4 | DOCKER_CMD ?= $(shell which docker 2> /dev/null || which podman 2> /dev/null || echo docker) 5 | 6 | ifneq (,$(findstring docker,$(DOCKER_CMD))) 7 | DOCKER_SUDO = sudo -E 8 | endif 9 | 10 | .PHONY: lint 11 | lint: 12 | $(DOCKER_SUDO) $(DOCKER_CMD) run --rm -v $$(pwd):/tmp/lint \ 13 | -e RUN_LOCAL=true \ 14 | -e LINTER_RULES_PATH=/ \ 15 | -e VALIDATE_NATURAL_LANGUAGE=true \ 16 | docker.io/github/super-linter 17 | -------------------------------------------------------------------------------- /OWNERS: -------------------------------------------------------------------------------- 1 | approvers: 2 | - johnbelamaric 3 | - henderiw 4 | - s3wong 5 | - tliron 6 | - liamfallon 7 | - efiacor 8 | - CsatariGergely 9 | - arora-sagar 10 | - timop62 11 | 12 | reviewers: 13 | - johnbelamaric 14 | - henderiw 15 | - s3wong 16 | - tliron 17 | - efiacor 18 | - liamfallon 19 | - CsatariGergely 20 | - arora-sagar 21 | - timop62 22 | -------------------------------------------------------------------------------- /assets/icons/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /assets/scss/_variables_project.scss: -------------------------------------------------------------------------------- 1 | $primary: #03639E; 2 | $secondary: #D7D7D7; -------------------------------------------------------------------------------- /content/en/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Start 3 | description: Documentation of the Nephio project 4 | menu: {main: {weight: 10}} 5 | --- 6 | {{< blocks/cover title="Welcome to the Nephio documentation" image_anchor="top" height="full" >}} 7 | 8 | Homepage 9 | 10 | 11 | GitHub 12 | 13 | 14 | Documentation 15 | 16 | 17 |

Cloud Native Network Automation

18 | {{< blocks/link-down color="info" >}} 19 | 20 | {{< /blocks/cover >}} 21 | 22 | {{% blocks/lead color="primary" %}} 23 | [Nephio project's](https://nephio.org) mission is "to deliver carrier-grade, simple, open, Kubernetes-based cloud native intent automation and 24 | common automation templates that materially simplify the deployment and management of multi-vendor cloud infrastructure 25 | and network functions across large scale edge deployments." 26 | {{% /blocks/lead %}} 27 | 28 | {{% blocks/section type="row" %}} 29 | 30 | {{% blocks/feature icon="fas fa-rocket" title="R3" %}} 31 | Welcome to the Release 3 of Nephio. This release is under ongoing development together with its documentation. It is 32 | possible to experience some incompleteness ;) 33 | {{% /blocks/feature %}} 34 | 35 | {{% blocks/feature icon="fab fa-wikipedia-w" title="Wiki" %}} 36 | Mass amount of developer information is available in the [wiki](https://wiki.nephio.org/). 37 | {{% /blocks/feature %}} 38 | 39 | {{% blocks/feature icon="fas fa-balance-scale-right" title="Charter" %}} 40 | Technical charter of the project can be found [here](https://github.com/nephio-project/governance/blob/main/nephio-technical-charter-amended-2022-06-22.pdf). 41 | {{% /blocks/feature %}} 42 | 43 | {{% /blocks/section %}} 44 | -------------------------------------------------------------------------------- /content/en/docs/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About Nephio 3 | linkTitle: Docs 4 | menu: {main: {weight: 20}} 5 | weight: 1 6 | --- 7 | 8 | Our mission is "to deliver carrier-grade, simple, open, Kubernetes-based 9 | cloud-native intent automation and common automation templates that materially 10 | simplify the deployment and management of multivendor cloud infrastructure and 11 | network functions across large-scale edge deployments." But what does that mean? 12 | With this release and the accompanying documentation, we hope to make that 13 | clear. 14 | 15 | Our mission outlines the basic goals. The [About Nephio 16 | page](https://nephio.org/about/) describes the high-level architecture of 17 | Nephio. It is important to understand that Nephio is about managing complex, 18 | interrelated workloads *at scale*. If we simply want to deploy a network 19 | function, then existing methods, such as Helm charts and scripts, are 20 | sufficient. Similarly, if we want to deploy some infrastructure, then using 21 | existing Infrastructure-as-Code tools can accomplish that. Configuring running 22 | network functions can already be done today with element managers. 23 | 24 | Why do we need Nephio? The problems Nephio aims to solve start only 25 | once we try to operate at scale. "Scale", in this case, does not simply mean 26 | "a large number of sites". "Scale" can encompass many different areas: the 27 | number of sites, services, and workloads, the size of each individual workload, 28 | the number of machines needed to operate the workloads, the complexity of the 29 | organization running the workloads, and other factors. The fact that our 30 | infrastructure, workloads, and workload configurations are all interconnected 31 | greatly increases the difficulty in managing these architectures at scale. 32 | 33 | To address these challenges, Nephio follows a [few basic 34 | principles](https://cloud.google.com/blog/topics/telecommunications/network-automation-csps-linus-nephio-cloud-native) 35 | that experience has shown to enable higher scaling with fewer management 36 | overheads. These principles are as follows: 37 | - It is *Intent-driven* to enable the user to specify what they want and 38 | let the system figure out how to make that happen. 39 | - It has *Distributed actuation* to increase reliability across widely 40 | distributed fleets. 41 | - It has *Uniformity in systems* to reduce redundant tooling and processes, 42 | and simplify operations. 43 | 44 | Nephio also leverages the "configuration as data" principle. This 45 | methodology means that the "intent" is captured in a machine-manageable format 46 | that we can treat as data, rather than code. In Nephio, we use the Kubernetes 47 | Resource Model (KRM) to capture the intent. As Kubernetes itself is already an 48 | intent-driven system, this model is well suited to our needs. 49 | 50 | To understand why we need to treat configuration as data, let us consider an 51 | example. In a given instance, a network function may have, for example, 100 52 | parameters that need to be decided upon. 100 such network functions, across 53 | 10,000 clusters, results in 100,000,000 inputs that need to be defined and 54 | managed. Handling such a large number of values, with their interdependencies 55 | and a need for consistency management between them, requires *data management* 56 | techniques, rather than *code* management techniques. This is why existing 57 | methodologies begin to break down at scale, particular at the edge-level scale. 58 | 59 | It should also be considered that no individual human will be able to understand 60 | all of these values. These values relate not only to the workloads, but also to 61 | the infrastructure that is required to support the workloads. They require 62 | different areas of expertise and different organizational boundaries of control. 63 | For example, you will need input from network planning (IP address, VLAN tags, 64 | ASNs, and so on), input from the compute infrastructure teams (types of hardware, 65 | or available VMs or OSs), the Kubernetes platform teams, the security teams, the 66 | network function experts, and many other individuals and teams. Each of these 67 | teams will have their own systems for tracking the values they control, as well 68 | as processes for allocating and distributing those values. This coordination 69 | between teams is a fundamental *organizational* problem with operating at scale. 70 | The existing tools and methods do not even attempt to address these parts of the 71 | problem. They *start* once all of the "input" decisions are made. 72 | 73 | The Nephio project believes that the organizational challenge of figuring out 74 | these values is one of the primary limiting factors to achieving the efficient 75 | management of large, complex systems at scale. This challenge becomes even 76 | greater when we understand the need to manage the changes to these values over 77 | time, and how changes to some values implies the need to change other values. 78 | This challenge is currently left to ad-hoc processes that differ across 79 | organizations. Nephio is working on how to structure the intent to make it 80 | manageable using data management techniques. 81 | 82 | This Nephio release focuses on the following: 83 | - Demonstrating the core Nephio principles, such as Configuration-as-Data and 84 | leveraging the intent-driven, active-reconciliation nature of Kubernetes. 85 | - Infrastructure orchestration/automation using controllers based on 86 | the Cluster API. Currently, only Kubernetes in Docker (KIND) cluster creation 87 | is supported. 88 | - Orchestration/automation of the deployment and management of 5G Core and RAN 89 | networks. 90 | 91 | While the current release uses Cluster API, KIND, and free5gc/OAI for 92 | demonstration purposes, the same principles and code can be used for managing 93 | other infrastructure and network functions. The *uniformity in systems* 94 | principle means that as long as something is manageable via the Kubernetes 95 | Resource Model, it is manageable via Nephio. 96 | 97 | -------------------------------------------------------------------------------- /content/en/docs/apis/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Models and APIs" 3 | type: docs 4 | weight: 5 5 | description: Reference for the Nephio models and APIs 6 | --- 7 | 8 | ## Overview 9 | 10 | Nephio APIs consist primarily of a collection of Go API objects, CRDs, and other KRM types, 11 | specified and maintained in the [Nephio API repository](https://github.com/nephio-project/api). 12 | This section aims to give a high-level overview of the objects that are available and their 13 | relationships, and is based on an 14 | [original document](https://docs.google.com/document/d/1-5nlpY4FbuhWtdKTvIqPOv4bWmA6zx6TdHoEfk9Jc_Q/edit) 15 | developed by Tal Liron. 16 | 17 | The aim is to keep the diagrams as simple as possible for now and only convey the important aspects 18 | of the modeled entities. 19 | As such, they are intended to give a high-level overview of the entities and relationships that can 20 | be accessed and modified via the Nephio API, and provide reference to detailed documentation, 21 | generated from the code, where available. 22 | 23 | ## Topology and network APIs 24 | 25 | This is a high-level overview of the Nephio models and their relationships, with links to the 26 | relevant API documentation where available, and to the source code where not. 27 | 28 | ```mermaid 29 | flowchart TD 30 | %% Topology constructs 31 | NFTopology-- 1 .. n -->NFInstance 32 | NFInstance -. refers .-> NFTemplate 33 | NFTemplate -- 1..n --> NFInterface 34 | NFInterface -. "refers (by name)" .-> NetworkInstance 35 | NFTemplate-.refers..->Capacity 36 | NFTemplate -. "refers (by name)" .-> NFClass 37 | NFClass -. refers .-> PackageRevisionReference 38 | style NFTopology fill:#00CC00 39 | click NFTopology "https://doc.crds.dev/github.com/nephio-project/api/topology.nephio.org/NFTopology/v1alpha1@v2.0.0" "NFTopology" 40 | style NFInstance fill:#00CC00 41 | click NFInstance "https://github.com/nephio-project/api/blob/main/nf_topology/v1alpha1/nf_topology_types.go#L59" "NFInstance" 42 | style NFTemplate fill:#00CC00 43 | click NFTemplate "https://github.com/nephio-project/api/blob/main/nf_topology/v1alpha1/nf_topology_types.go#L45" "NFTemplate" 44 | style NFInterface fill:#00CC00 45 | click NFInterface "https://github.com/nephio-project/api/blob/main/nf_topology/v1alpha1/nf_topology_types.go#L35" "NFInterface" 46 | style Capacity fill:#00CC00 47 | click Capacity "https://doc.crds.dev/github.com/nephio-project/api/req.nephio.org/Capacity/v1alpha1@v2.0.0" "Capacity" 48 | style NFClass fill:#00CC00 49 | click NFClass "https://doc.crds.dev/github.com/nephio-project/api/req.nephio.org/NFClass/v1alpha1@v2.0.0" "NFClass" 50 | style PackageRevisionReference fill:#00CC00 51 | click PackageRevisionReference "https://github.com/nephio-project/api/blob/main/nf_topology/v1alpha1/nf_class_types.go#L25" "PackageRevisionReference" 52 | 53 | %% Workload constructs 54 | 55 | DataNetwork -- 1..n --> Pool 56 | DataNetwork -. refers .-> NetworkInstance 57 | NFDeployment -. refers .-> Provider 58 | NFDeployment -. refers .-> Capacity 59 | NFDeployment -- 1..n --> InterfaceConfig 60 | NFDeployment -- 1..n --> NetworkInstance 61 | NFDeployment -. refers .-> ParametersRefs 62 | style DataNetwork fill:#CCCCFF 63 | click DataNetwork "https://doc.crds.dev/github.com/nephio-project/api/req.nephio.org/DataNetwork/v1alpha1@v2.0.0" "DataNetwork" 64 | style NetworkInstance fill:#CCCCFF 65 | click NetworkInstance "https://doc.crds.dev/github.com/nephio-project/api/req.nephio.org/NetworkInstance/v1alpha1@v2.0.0" "NetworkInstance" 66 | style Pool fill:#CCCCFF 67 | click Pool "https://github.com/nephio-project/api/blob/main/workload/v1alpha1/nf_deployment_types.go#L165" "Pool" 68 | 69 | ``` 70 | 71 | A detailed API description can be found [here](topology-and-networking/). 72 | 73 | ## Porch 74 | 75 | A detailed API description of Porch can be found [here](porch/). -------------------------------------------------------------------------------- /content/en/docs/apis/porch/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Package Orchestration API Specifications" 3 | type: docs 4 | weight: 5 5 | description: Reference for the Nephio Porch APIs 6 | --- 7 | {{< iframe src="https://doc.crds.dev/github.com/nephio-project/porch@v4.0.0" sub="https://doc.crds.dev/github.com/nephio-project/porch@v4.0.0">}} 8 | -------------------------------------------------------------------------------- /content/en/docs/apis/topology-and-networking/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Topology and Networking API Specifications" 3 | type: docs 4 | weight: 5 5 | description: Reference for the Nephio Topology and Networking APIs 6 | --- 7 | {{< iframe src="https://doc.crds.dev/github.com/nephio-project/api@v4.0.0" sub="https://doc.crds.dev/github.com/nephio-project/api@v4.0.0">}} -------------------------------------------------------------------------------- /content/en/docs/architecture.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Nephio Architecture" 3 | type: docs 4 | weight: 5 5 | description: Reference for the Nephio Architecture 6 | --- 7 | 8 | Some experiments on working with [C4 model](https://c4model.com/) to document Nephio. 9 | 10 | ## Prerequisites 11 | 1. [Graphviz](https://graphviz.org/download/) is required to render some of the diagrams in this document. 12 | 13 | ## System Context View 14 | 15 | 16 | ![System Context](/static/images/architecture/level1-nephio-system.png) 17 | 18 | The system context view gives a high level perspective of the Nephio software system and the external entities that it interacts with. There are no deployment considerations in this view - the main purpose of the picture is to depict what is the responsibility and scope of Nephio, and the key interfaces and capabilities it exposes to deliver on that responsibility. 19 | 20 | ## System Landscape View 21 | 22 | ![System Landscape](/static/images/architecture/level2-nephio-container.png) 23 | 24 | Nephio is an amalgamation of software systems, so a system landscape provides a high-level view of how those software systems operate together. 25 | 26 | ## Component Views 27 | 28 | ### Nephio Core 29 | 30 | ![Nephio Core Component View](/static/images/architecture/level3-nephio-core-component.png) 31 | 32 | Nephio core is a collection of operators and functions that perform the fundamental aspects of Nephio use cases, independent of the specifics of vendor implementations. 33 | 34 | The controllers for OAI and Free5GC are represented here. Although they are vendor extensions to Nephio, they are for now part of the Nephio system. 35 | 36 | 37 | ### Porch 38 | 39 | ![Nephio Porch Component View](/static/images/architecture/nephio-porch-component-view.png) 40 | -------------------------------------------------------------------------------- /content/en/docs/guides/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Guides 3 | description: A collection of Nephio guides. 4 | weight: 2 5 | --- 6 | 7 | 8 | The Nephio documentation provides a comprehensive collection of step-by-step guides. These guides 9 | are complete worked examples made up of multiple tasks that guide the user through a relatively 10 | simple but realistic scenario: building an application that uses some of your project’s features, 11 | for example. If you have already created some examples for your project, you can base tutorials on 12 | them. This section is optional. However, remember that, although you may not need this section at 13 | first, having tutorials can be useful to help your users engage with your example code, especially 14 | if there are aspects that need more explanation than you can easily provide in code comments. 15 | 16 | The Guides fall into three categories: install guides, user guides, and contributor guides. -------------------------------------------------------------------------------- /content/en/docs/guides/contributor-guides/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio contributor guides 3 | description: > 4 | Nephio contributor guides 5 | weight: 3 6 | --- 7 | 8 | This developer guide is for people who want to write code for the Nephio project. This document is written as an extension of the [Kubernetes Developer Guides](https://github.com/kubernetes/community/tree/master/contributors/devel#the-process-of-developing-and-contributing-code-to-the-kubernetes-project) 9 | and therefore covers topics specific to Nephio development that are not already covered there. 10 | -------------------------------------------------------------------------------- /content/en/docs/guides/contributor-guides/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Documentation 3 | description: > 4 | Contributors guide for the Nephio documentation 5 | weight: 5 6 | --- 7 | 8 | ## Framework 9 | 10 | The Nephio documentation is built with the .md / Hugo / Docsy / Netlify framework. 11 | 12 | * **.md:** The documentation itself is written in Markdown (,md) with some Hugo and Docsy related extensions. The .md 13 | files are stored and managed in a Git repository in [nephio-project/docs](https://github.com/nephio-project/docs). 14 | * **Hugo:** [Hugo](https://gohugo.io/) is used to render the documentation fo static html pages. 15 | * **Docsy:** [Docsy](https://www.docsy.dev/) is a theme for Hugo what we use to provide the basic structure and look 16 | and feel of the documentation. 17 | * **Netlify:** [Netlify](https://www.netlify.com/) is a service to host documentation. We are hosting the Nephio 18 | documentation from here. 19 | 20 | ## Creating issues 21 | 22 | Documentation issues are handled in the nephio-project/nephio repository's [issue handler](https://github.com/nephio-project/nephio/issues). 23 | Add the *area/docs* and the *documentation* labels to the issues created for the documentation. 24 | 25 | ## Style guide 26 | 27 | * Use US English in the documentation 28 | * Do not add manually a table of contents to the documents. Hugo and Docsy takes care of this. 29 | * Do not use H1 (#) headers in the documents. Docsy generates a H1 header to every document consistent with the title 30 | of the document. Start the headings with H2 (##) 31 | * Use the built in alerts for notes and alerts 32 | 33 | ```go-html-template 34 | {{%/* alert title="Warning" color="primary" */%}} 35 | This is a note. 36 | {{%/* /alert */%}} 37 | ``` 38 | 39 | ```go-html-template 40 | {{%/* alert title="Warning" color="warning" */%}} 41 | This is a warning. 42 | {{%/* /alert */%}} 43 | ``` 44 | * Colors to be used when creating figures are [here](https://color.adobe.com/Nephio-secondary-colors-color-theme-0bbcdea2-0533-4ab3-812f-f752f30b5b40/) 45 | * If you add any commands to the content inline surround the comand with backticks (\` \`), like \`ls -la\` 46 | * Do not surround IP addresses, domain names or any other identifyers with backticks. Use italics (\* \*) to mark any 47 | inline IP address, domain name, file name, file location or similar. 48 | * Whenever possible define the type of code for your code blocks 49 | * \```bash for all shell blocks 50 | * \```golang for all Go blocks 51 | * \```yaml for all YAML blocks 52 | * \``` yang for all YANG blocks 53 | * a full list of language identifyers is available [here](https://gohugo.io/content-management/syntax-highlighting/#list-of-chroma-highlighting-languages) 54 | * Do not add any TBDs to the documentation. If something is missing create an [issue](https://github.com/nephio-project/nephio/issues) for it 55 | 56 | ## How to contribute 57 | 58 | Follow the Nephio contribution process, based on GitHub pull requests and Prow. Contributions to the Nephio 59 | documentation require the [Nephio CLA](https://docs.linuxfoundation.org/lfx/easycla/v2-current/contributors/corporate-contributor#github). 60 | 61 | ### Build your environment 62 | 63 | Following the description [here](https://github.com/nephio-project/docs?tab=readme-ov-file#setting-up-the-environment). 64 | 65 | ### Tests before submitting a pull request 66 | 67 | * Build and deploy the documentation locally 68 | * run `hugo serve` 69 | * Build in a same way as Netlify is doing it 70 | * run `hugo --gc --minify` 71 | * Check links 72 | * Install and run [linkspector](https://github.com/UmbrellaDocs/linkspector) 73 | ```bash 74 | npm install -g @umbrelladocs/linkspector 75 | linkinspector check -c .linkspector.yml 76 | ``` 77 | 78 | ### Checks before submitting a pr 79 | 80 | ## FAQ 81 | 82 | 1. How do I check the documentation links on the documentation before I check in my changes? 83 | 84 | Install and run *linkspector* 85 | ``` 86 | npm install -g @umbrelladocs/linkspector 87 | linkinspector check -c .linkspector.yml 88 | ``` 89 | -------------------------------------------------------------------------------- /content/en/docs/guides/contributor-guides/minimal-environment.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Minimal Environment install for development 3 | description: > 4 | How to set up a minimal environment for development in the Nephio project. 5 | weight: 5 6 | --- 7 | 8 | The following environment install works on a MacBook Pro M1 or via SSH to Ubuntu 22.04 to get the nephio-operators 9 | running in VS Code talking to a local kind cluster running in Docker. Note that depending on what part of Nephio you are 10 | working on, you may wish to install less or more of the components below. It should work on other environments with 11 | appropriate tweaking. 12 | 13 | ## Install Docker, kind, and kpt packages 14 | 15 | This script automates steps 3 to 9 below. 16 | 17 | ```bash 18 | #!/usr/bin/env bash 19 | 20 | cat </dev/null || exit 31 | for pkg in "distros/sandbox/gitea" "/nephio/core/porch" "nephio/core/configsync" "nephio/optional/resource-backend"; do 32 | kpt pkg get "https://github.com/nephio-project/catalog.git/${pkg}@main" "${pkg##*/}" 33 | kpt live init "${pkg##*/}" 34 | kpt live apply "${pkg##*/}" 35 | done 36 | 37 | kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/core/nephio-operator nephio-operator 38 | find nephio-operator/crd/bases/*.yaml -exec kubectl apply -f {} \; 39 | 40 | popd >/dev/null || exit 41 | ``` 42 | 43 | ### Installation steps: 44 | 45 | 1. [Install Docker](https://docs.docker.com/engine/install/) using the appropriate method for your system. 46 | 2. [Install kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation) using the appropriate method for your 47 | system (homebrew on mac) 48 | 3. [Install kpt CLI](https://kpt.dev/installation/kpt-cli) using the appropriate method for your system (e.g. homebrew 49 | on mac) 50 | 4. Create the management cluster 51 | 52 | ```bash 53 | kind create cluster -n mgmt 54 | ``` 55 | 56 | 5. Install Gitea 57 | 58 | ```bash 59 | kpt pkg get https://github.com/nephio-project/catalog.git/distros/sandbox/gitea@main gitea 60 | kpt live init gitea 61 | kpt live apply gitea 62 | ``` 63 | 64 | 6. Make Gitea visible on host machine 65 | 66 | ```bash 67 | kubectl port-forward -n gitea svc/gitea 3000:3000 68 | ``` 69 | 70 | 7. Install Porch 71 | 72 | ```bash 73 | kpt pkg get https://github.com/nephio-project/catalog.git/nephio/core/porch@main porch 74 | kpt live init porch 75 | kpt live apply porch 76 | ``` 77 | 78 | 8. Install configsync 79 | 80 | ```bash 81 | kpt pkg get https://github.com/nephio-project/catalog.git/nephio/core/configsync@main configsync 82 | kpt live init configsync 83 | kpt live apply configsync 84 | ``` 85 | 86 | 9. Install the resource backend 87 | 88 | ```bash 89 | kpt pkg get https://github.com/nephio-project/catalog.git/nephio/optional/resource-backend@main resource-backend 90 | kpt live init resource-backend 91 | kpt live apply resource-backend 92 | ``` 93 | 94 | 10. Load the Nephio CRDs 95 | 96 | ```bash 97 | kpt pkg get https://github.com/nephio-project/catalog/tree/main/nephio/core/nephio-operator nephio-operator 98 | ls nephio-operator/crd/bases/*.yaml | xargs -n1 kubectl apply -f 99 | ``` 100 | 101 | ## Connect to Gitea on your browser 102 | 103 | Connecting to Gitea allows you to see the actions that Nephio takes on Gitea. 104 | 105 | 1. Port forward the Gitea port to your localhost 106 | 107 | ```bash 108 | kubectl port-forward -n gitea svc/gitea 3000:3000 109 | ``` 110 | 111 | 2. Browse to the Gitea web client at http://localhost:3000 and log on. 112 | 113 | ## VS Code Configuration 114 | 115 | Set up a launch configuration in VS Code *launch.json* similar to the configuration below: 116 | 117 | ```json 118 | { 119 | "version": "0.2.0", 120 | "configurations": [ 121 | { 122 | "name": "Launch Nephio Controller Manager", 123 | "type": "go", 124 | "request": "launch", 125 | "mode": "auto", 126 | "program": "${workspaceFolder}/operators/nephio-controller-manager", 127 | "args": [ 128 | "--reconcilers", 129 | "*" 130 | ], 131 | "env": { 132 | "GIT_URL": "http://localhost:3000", 133 | "GIT_NAMESPACE": "gitea" 134 | }, 135 | } 136 | ] 137 | } 138 | ``` 139 | 140 | You can now launch the Nephio operators in VS Code using the launch configuration above. You can specify a list of the reconcilers you wish to run in the `--reconcilers` argument value or `*` to run all the reconcilers. 141 | 142 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/common-components.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installing base Nephio components 3 | description: > 4 | After installing the environment-specific dependencies, you can install the base Nephio components. There are two 5 | essential components: Porch, and Nephio Controllers. 6 | 7 | weight: 2 8 | --- 9 | 10 | {{% pageinfo %}} 11 | This page is draft and the separation of the content to different categories is not done. 12 | {{% /pageinfo %}} 13 | 14 | 15 | {{% alert title="Note" color="primary" %}} 16 | 17 | If you want to use a version other than that of v3.0.0 of Nephio *catalog* repository, then replace the *@origin/v3.0.0* 18 | suffix on the package URLs on the `kpt pkg get` commands below with the tag/branch of the version you wish to use. 19 | 20 | While using kpt you can [either pull a branch or a tag](https://kpt.dev/book/03-packages/01-getting-a-package) from a 21 | git repository. By default it pulls the tag. In case, you have branch with the same name as a tag then to: 22 | 23 | ```bash 24 | #pull a branch 25 | kpt pkg get --for-deployment @origin/v3.0.0 26 | #pull a tag 27 | kpt pkg get --for-deployment @v3.0.0 28 | ``` 29 | 30 | {{% /alert %}} 31 | 32 | ## Porch 33 | 34 | This "Package Orchestration" component provides the Kubernetes APIs for Repositories, PackageRevisions, 35 | PackageRevisionResources, PackageVariants, and PackageVariantSets. Nephio relies on it to inventory, clone, and mutate 36 | packages. It also provides the API layer that shields the Nephio components from direct interaction with the Git 37 | (or OCI) storage layer. 38 | 39 | Fetch the package using `kpt`, and run any `kpt` functions, and then apply the package: 40 | 41 | ```bash 42 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog/nephio/core/porch@origin/v3.0.0 43 | kpt fn render porch 44 | kpt live init porch 45 | kpt live apply porch --reconcile-timeout=15m --output=table 46 | ``` 47 | 48 | ## Nephio Operators 49 | 50 | The Nephio Operators provide implementations of the Nephio-specific APIs. This includes the code that implements the 51 | various package specialization features - such as integration with IPAM and VLAN allocation, and NAD generation - as 52 | well as operators that can provision repositories and bootstrap new clusters into Nephio. 53 | 54 | To install the Nephio Operators, repeat the `kpt` steps, but for that package: 55 | 56 | ```bash 57 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/core/nephio-operator@origin/v3.0.0 58 | ``` 59 | 60 | The Nephio Operator package by default uses the Gitea instance at *172.18.0.200:3000* as 61 | the git repository. Change it to point to your git instance in 62 | *nephio-operator/app/controller/deployment-token-controller.yaml* and 63 | *nephio-operator/app/controller/deployment-controller.yaml*. 64 | 65 | You also need to create a secret with your Git instance credentials: 66 | 67 | ```bash 68 | kubectl apply -f - < 77 | password: 78 | EOF 79 | ``` 80 | 81 | Now you can continue the installation process: 82 | 83 | ```bash 84 | kpt fn render nephio-operator 85 | kpt live init nephio-operator 86 | kpt live apply nephio-operator --reconcile-timeout=15m --output=table 87 | ``` 88 | 89 | ## Management Cluster GitOps Tool 90 | 91 | A GitOps tool (configsync) is installed to allow GitOps-based application of packages on the management cluster itself. 92 | It is not needed if you only want to provision network functions, but it is used extensively in the cluster provisioning 93 | workflows. 94 | 95 | Different GitOps tools may be used, but these instructions only cover configsync. 96 | To install it on the management cluster, we again follow the same process. 97 | Later, we will configure it to point to the *mgmt* repository: 98 | 99 | ```bash 100 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/core/configsync@origin/v3.0.0 101 | kpt fn render configsync 102 | kpt live init configsync 103 | kpt live apply configsync --reconcile-timeout=15m --output=table 104 | ``` 105 | 106 | ## Nephio Stock Repositories 107 | 108 | The repositories with the Nephio packages used in the exercises are available to be installed via a package for 109 | convenience. This will install repository resources pointing directly to the GitHub repositories, with read-only access. 110 | 111 | ```bash 112 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/stock-repos@origin/v3.0.0 113 | kpt fn render stock-repos 114 | kpt live init stock-repos 115 | kpt live apply stock-repos --reconcile-timeout=15m --output=table 116 | ``` 117 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/common-dependencies.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installing common dependencies 3 | description: > 4 | This guide describes how to install some required dependencies that are the same across all environments. 5 | 6 | weight: 1 7 | --- 8 | 9 | Some of these, like the resource-backend, will move out of the "required" 10 | category in later releases. Even if you do not use these directly in your 11 | installation, the CRDs that come along with them are necessary. 12 | 13 | {{% alert title="Note" color="primary" %}} 14 | 15 | If you want to use a version other than that of v3.0.0 of Nephio *catalog* repository, then replace the *@origin/v3.0.0* 16 | suffix on the package URLs on the `kpt pkg get` commands below with the tag/branch of the version you wish to use. 17 | 18 | While using kpt you can [either pull a branch or a tag](https://kpt.dev/book/03-packages/01-getting-a-package) from a 19 | git repository. By default it pulls the tag. In case, you have branch with the same name as a tag then to: 20 | 21 | ```bash 22 | #pull a branch 23 | kpt pkg get --for-deployment @origin/v3.0.0 24 | #pull a tag 25 | kpt pkg get --for-deployment @v3.0.0 26 | ``` 27 | 28 | {{% /alert %}} 29 | 30 | ## Network Config Operator 31 | 32 | This component is a controller for applying configuration to routers and 33 | switches. 34 | 35 | ```bash 36 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/network-config@origin/v3.0.0 37 | kpt fn render network-config 38 | kpt live init network-config 39 | kpt live apply network-config --reconcile-timeout=15m --output=table 40 | ``` 41 | 42 | ## Resource Backend 43 | 44 | The resource backend provides IP and VLAN allocation. 45 | 46 | ```bash 47 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/resource-backend@origin/v3.0.0 48 | kpt fn render resource-backend 49 | kpt live init resource-backend 50 | kpt live apply resource-backend --reconcile-timeout=15m --output=table 51 | ``` 52 | 53 | ## Setup a Downstream Git Repository 54 | 55 | Nephio needs a git repository (as a source of truth) to store the packages 56 | which are getting deployed or are already deployed on the cluster. Either you can use GitHub, GitLab or Gitea. If you want to use [Gitea](https://about.gitea.com/), 57 | then you can follow below steps: 58 | 59 | ```bash 60 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/distros/sandbox/gitea@origin/v3.0.0 61 | kpt fn render gitea 62 | kpt live init gitea 63 | kpt live apply gitea --reconcile-timeout 15m --output=table 64 | ``` 65 | 66 | You can find the Gitea ip-address via `kubectl get svc -n gitea` 67 | and use port 3000 to access it with login *nephio* and password *secret*. 68 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/demo-vagrant-windows.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio demo on Windows 3 | description: > 4 | Step by step guide to run Nephio on Windows 5 | weight: 6 6 | --- 7 | 8 | {{% pageinfo %}} 9 | This page is draft and the separation of the content to different categories is not done. 10 | {{% /pageinfo %}} 11 | 12 | 13 | ## Steps 14 | 15 | - Install git 16 | - Install VirtualBox 17 | - Install [vagrant](https://developer.hashicorp.com/vagrant/docs/installation) 18 | - open git bash 19 | - `git clone https://github.com/nephio-project/test-infra.git && cd test-infra/e2e/provision` 20 | - `vagrant up` 21 | - `vagrant ssh -- -L 7007:localhost:7007 -L 3000:172.18.0.200:3000` 22 | 23 | ## Networking 24 | 25 | The Vagrant networking will not work on Windows to allow access to the Nephio 26 | Web UI and Gitea Web UI due the [Hyper-V 27 | limitation](https://developer.hashicorp.com/vagrant/docs/providers/hyperv/limitations#limited-networking). 28 | Meanwhile, for 29 | [VirtualBox](https://developer.hashicorp.com/vagrant/docs/providers/virtualbox/networking#virtualbox-nic-type) 30 | (used here), we can create an internal network by adding the following line to 31 | the Vagrant.configure: 32 | 33 | `config.vm.network "private_network", ip: "192.168.50.4", virtualbox__intnet: true` 34 | 35 | The easiest way is to force the port-forwarding as shown before: 36 | 37 | `vagrant ssh -- -L 7007:localhost:7007 -L 3000:172.18.0.200:3000` 38 | 39 | ## Tests were done on 40 | 41 | 1. Laptop: Windows 11 i7-10750H (16 T) 32GB ram (8VCPU 32GB) 42 | 43 | 2. Laptop: Windows 10 i5-7200U (4T) 24GB ram (4VCPU 16RAM) 44 | 45 | ## Notes 46 | 47 | {{% alert title="Warning" color="warning" %}} 48 | 49 | For low-end machines (less then 8T32GB), you will need to modify 50 | the Vagrant file. This is not recommended! 51 | 52 | {{% /alert %}} 53 | 54 | - In the Vagrant file *./Vagrantfile*, there are *CPUS & RAM* parameters in 55 | the *config.vm.provider*, it's possible to override them at runtime: 56 | - On Linux, or the Git Bash on Windows we can use a one-liner command `CPUS=16 57 | MEMORY=32768 vagrant up` 58 | 59 | - In the Ansible *./playbooks/roles/bootstrap/tasks/prechecks.yml* file, there 60 | are the checks for *CPUS & RAM* 61 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/explore-nephio-free5gc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio Free5gc Operator 3 | description: > 4 | Step by step guide to deploy the Free5gc Operator 5 | weight: 6 6 | --- 7 | 8 | Concepts as [Operator](../../glossary-abbreviations.md#operator) and 9 | 10 | [Controller](../../glossary-abbreviations.md#controller) and 11 | 12 | [CR](../../glossary-abbreviations.md#custom-resource) have already been explained here. 13 | 14 | 15 | ## Deploy the operator to the cluster 16 | 17 | In the [Nephio Free5gc repository](https://github.com/nephio-project/free5gc) the **Makefile** is used to 18 | [deploy the operator to the cluster](https://github.com/nephio-project/free5gc/tree/main#getting-started) automating 19 | tasks such as 20 | 21 | 1. Build Targets: 22 | * build: Builds the operator binary. 23 | * run: Runs the controller from the host. 24 | * docker-build: Builds a Docker image with the operator. 25 | * docker-push: Pushes the Docker image with the operator. 26 | 27 | 2. Deployment Targets: 28 | * install: Installs CustomResourceDefinitions (CRDs) into the Kubernetes cluster. 29 | * uninstall: Uninstalls CRDs from the Kubernetes cluster. 30 | * deploy: Deploys the controller to the Kubernetes cluster. 31 | * undeploy: Undeploys the controller from the Kubernetes cluster. 32 | 33 | 3. Build Dependencies: 34 | * Targets for installing and managing build dependencies like Kustomize, controller-gen, and envtest. 35 | 36 | ## The structure of the repository 37 | 38 | 1. [Operator](https://github.com/nephio-project/free5gc/tree/main/free5gc-operator) 39 | * Binding metrics and check the health of ports 40 | * Registering UPF SMF AMF deployments 41 | * Reconciler and Setup (Creating Controllers) 42 | 43 | 2. [Controllers](https://github.com/nephio-project/free5gc/tree/main/controllers) 44 | * **Reconciler**: The XXFDeploymentReconciler struct is responsible for reconciling the state of the XXFDeployment 45 | resource in the Kubernetes cluster. It implements the Reconcile function, which is called by the Controller Runtime 46 | framework when changes occur to the XXFDeployment resource. The Reconcile function performs various operations such 47 | as creating or updating the ConfigMap and Service resources associated with the XXFDeployment. 48 | Overall, the XXFDeploymentReconciler struct acts as the controller for the XXFDeployment resource, ensuring that the 49 | cluster state aligns with the desired state specified by the user. 50 | * **Resources**: functions that provide the necessary logic to create the required Kubernetes resources for an XXF 51 | deployment, including the deployment, service, and configuration map: 52 | 53 | * createDeployment: This function creates a Deployment resource for the AMF deployment. It defines the desired 54 | state of the deployment, including the number of replicas, container image, ports, command, arguments, volume 55 | mounts, resource requirements, and security context. 56 | * createService: This function creates a Service resource for the AMF deployment. It defines the desired state of 57 | the service, including the selector for the associated deployment and the ports it exposes. 58 | * createConfigMap: This function creates a ConfigMap resource for the AMF deployment. It generates the 59 | configuration data for the AMF based on the provided template values and renders it into the *amfcfg.yaml* file. 60 | * createResourceRequirements: This function calculates the resource requirements (CPU and memory limits and 61 | requests) for the AMF deployment based on the specified capacity and sets them in a ResourceRequirements object. 62 | * createNetworkAttachmentDefinitionNetworks: This function creates the network attachment definition networks for 63 | the AMF deployment. It uses the CreateNetworkAttachmentDefinitionNetworks function from the controllers package to 64 | generate the network attachment definition YAML based on the provided template name and interface configurations. 65 | * **Templates**: The configuration template includes various parameters. Example for AMF: version, description, 66 | ngapIpList, sbi, nrfUri, amfName, serviceNameList, servedGuamiList, supportTaiList, plmnSupportList, supportDnnList, 67 | security settings, networkName, locality, networkFeatureSupport5GS, timers, and logger configurations. 68 | The renderConfigurationTemplate function takes a struct (configurationTemplateValues) containing the values for 69 | placeholders in the template and renders the final configuration as a string. The rendered configuration can then be 70 | used by the AMF application. 71 | * **Status**: It holds the logic to get the status of the deployment and displaying it as "Available," "Progressing," 72 | and "ReplicaFailure".The function returns the NFDeploymentStatus object and a boolean value indicating whether the 73 | status has been updated or not. 74 | 75 | 3. [Config](https://github.com/nephio-project/free5gc/tree/main/config) 76 | 77 | There are [Kustomization](https://github.com/kubernetes-sigs/kustomize) files for a Kubernetes application, specifying various configuration options and resources for the application. 78 | 79 | In the */default* folder there are: 80 | 81 | * *Namespace*: Defines the namespace (free5gc) where all resources will be deployed. 82 | * *Name Prefix*: Specifies a prefix (free5gc-operator-) that will be prepended to the names of all resources. 83 | * *Common Labels*: Allows adding labels to all resources and selectors. Currently commented out. 84 | * *Bases*: Specifies the directories (*../crd*, *../rbac*, *../operator*) containing the base resources for the application. 85 | In the *crd/base* folder there are CRDs for the workload network functions. They define the schema for the 86 | "XXFDeployment" resource under the "workload.nephio.org" group. Also, there are YAML configuration files for teaching 87 | kustomize how to substitute *name* and *namespace* reference in CRD. 88 | * *Patches Strategic Merge*: Specifies the patches that should be applied to the base resources. 89 | Currently includes a patch file named *manager_auth_proxy_patch.yaml*, which adds authentication protection to the 90 | */metrics* endpoint. 91 | * **Vars**: Defines variables that can be used for variable substitution. 92 | 93 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/install-on-gce.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installation on GCE 3 | description: > 4 | Step by step guide to install Nephio on GCE 5 | weight: 3 6 | --- 7 | 8 | ## Introduction 9 | 10 | This Installation Guide will set up and run a Nephio demonstration 11 | environment. This environment is a single VM that will be used in the exercises 12 | to simulate a topology with a Nephio management cluster and three workload clusters. 13 | 14 | ## Installing on GCE 15 | 16 | ### GCE Prerequisites 17 | 18 | You will need an account in GCP and *gcloud* installed on your local environment. 19 | 20 | ### Create a Virtual Machine on GCE 21 | 22 | ```bash 23 | gcloud compute instances create --machine-type e2-standard-16 \ 24 | --boot-disk-size 200GB \ 25 | --image-family=ubuntu-2004-lts \ 26 | --image-project=ubuntu-os-cloud \ 27 | --metadata=startup-script-url=https://raw.githubusercontent.com/nephio-project/test-infra/v3.0.0/e2e/provision/init.sh,nephio-test-infra-branch=v3.0.0 \ 28 | nephio-r3-e2e 29 | ``` 30 | 31 | {{% alert title="Note" color="primary" %}} 32 | 33 | e2-standard-16 is recommended and e2-standard-8 is minimum. 34 | 35 | {{% /alert %}} 36 | 37 | ### Follow the Installation on GCE 38 | 39 | If you want to watch the progress of the installation, give it about 30 40 | seconds to reach a network accessible state, and then SSH in and tail the 41 | startup script execution: 42 | 43 | ```bash 44 | gcloud compute ssh ubuntu@nephio-r3-e2e -- \ 45 | sudo journalctl -u google-startup-scripts.service --follow 46 | ``` 47 | 48 | ## Access to the User Interfaces 49 | 50 | Once it is completed, SSH in and port forward the port to the UI (7007) and to 51 | Gitea's HTTP interface, if desired (3000): 52 | 53 | ```bash 54 | gcloud compute ssh ubuntu@nephio-r3-e2e -- \ 55 | -L 7007:localhost:7007 \ 56 | -L 3000:172.18.0.200:3000 \ 57 | kubectl port-forward --namespace=nephio-webui svc/nephio-webui 7007 58 | ``` 59 | 60 | You can now navigate to: 61 | - [http://localhost:7007/config-as-data](http://localhost:7007/config-as-data) to 62 | browse the Nephio Web UI 63 | - [http://localhost:3000/nephio](http://localhost:3000/nephio) to browse the Gitea UI 64 | 65 | ## Open Terminal 66 | 67 | You will probably want a second SSH window open to run *kubectl* commands, etc., 68 | without the port forwarding (which would fail if you try to open a second SSH 69 | connection with that setting). 70 | 71 | ```bash 72 | gcloud compute ssh ubuntu@nephio-r3-e2e 73 | ``` 74 | 75 | ## Next Steps 76 | 77 | * Step through the exercises 78 | * [Free5GC Testbed Deployment and E2E testing with UERANSIM](/content/en/docs/guides/user-guides/usecase-user-guides/exercise-1-free5gc.md) 79 | * [OAI Core and RAN Testbed Deployment and E2E testing](/content/en/docs/guides/user-guides/usecase-user-guides/exercise-2-oai.md) 80 | * Dig into the [user guide](/content/en/docs/guides/user-guides/_index.md) 81 | * In case you want to install Nephio on pre-provisioned VMs: 82 | * [Single VM](/content/en/docs/guides/install-guides/install-on-single-vm.md) 83 | * [Multiple VM](/content/en/docs/guides/install-guides/install-on-multiple-vm.md) 84 | 85 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/install-on-multiple-vm.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio manual deployment on multiple VMs 3 | description: > 4 | Nephio manual deployment on different VMs 5 | weight: 7 6 | --- 7 | 8 | ## Prerequisites 9 | 10 | * Cluster Management (controller) 11 | * 4 vCPU 12 | * 8 GB RAM 13 | * Kubernetes version 1.26+ 14 | * *kubectl* [installed ](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) 15 | * **Ingress/Load Balancer**: [MetalLB](https://metallb.universe.tf/), but only internally to the VM 16 | * Cluster Edge 17 | * 2 vCPU 1 NODE 18 | * 4 GB RAM 19 | * Kubernetes version 1.26+ 20 | * *kubectl* [installed ](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) 21 | * *kpt* [installed](https://kpt.dev/installation/kpt-cli) (version v1.0.0-beta.43 or later) 22 | * *porchctl* [installed](/content/en/docs/porch/user-guides/porchctl-cli-guide.md) on your workstation 23 | 24 | ## Installation of the management cluster 25 | 26 | ### Manual Installation of the management cluster using kpt 27 | 28 | - [Common Dependencies](/content/en/docs/guides/install-guides/common-dependencies.md) 29 | - [Common Components](/content/en/docs/guides/install-guides/common-components.md) 30 | 31 | ## Manual Installation of the Edge cluster using kpt 32 | 33 | All the workload clusters need *config-sync*, *root-sync* 34 | and a cluster git repository to manage packages. 35 | The below steps have to be repeated for each workload cluster: 36 | 37 | ### Install Config-sync 38 | 39 | Install *config-sync* using: 40 | 41 | ```bash 42 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/core/configsync@origin/v3.0.0 43 | kpt fn render configsync 44 | kpt live init configsync 45 | kpt live apply configsync --reconcile-timeout=15m --output=table 46 | ``` 47 | 48 | ### Create Git Repository 49 | 50 | Create a repository for your cluster either in your git provider or in Gitea. 51 | 52 | If you want to use GitHub or GitLab then follow below steps 53 | 54 | Get a [GitHub token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens) if your repository is private, 55 | to allow Porch to make modifications. 56 | 57 | Register the edge repository using *kpt* CLI or Nephio WebUI. 58 | 59 | ```bash 60 | GITHUB_USERNAME= 61 | GITHUB_TOKEN= 62 | 63 | porchctl repo register \ 64 | --namespace default \ 65 | --repo-basic-username=${GITHUB_USERNAME} \ 66 | --repo-basic-password=${GITHUB_TOKEN} \ 67 | --create-branch=true \ 68 | --deployment=true \ 69 | 70 | ``` 71 | 72 | 73 | In case, you are using Gitea then you can use the following steps 74 | 75 | ```bash 76 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/distros/sandbox/repository@origin/v3.0.0 77 | kpt fn render 78 | kpt live init 79 | kpt live apply --reconcile-timeout=15m --output=table 80 | ``` 81 | 82 | {{% alert title="Note" color="primary" %}} 83 | 84 | * For management cluster you have to name the repository as *mgmt*. 85 | * In the *repository* package by default Gitea address is *172.18.0.200:3000* in *repository/set-values.yaml* 86 | change this to your git address. 87 | * *repository/token-configsync.yaml* and *repository/token-porch.yaml* are responsible for creating secrets with the 88 | help of Nephio token controller for accessing git instance for root-sync. You would need the name of config-sync token 89 | to provide it to root-sync. 90 | 91 | {{% /alert %}} 92 | 93 | ### Install Root-sync 94 | 95 | Get the *root-sync* *kpt* package and edit it: 96 | 97 | ```bash 98 | kpt pkg get https://github.com/nephio-project/catalog.git/nephio/optional/rootsync@origin/v3.0.0 99 | ``` 100 | 101 | Change *./rootsync/rootsync.yaml* and point *spec.git.repo* to the edge git repository and the 102 | 103 | ```yaml 104 | spec: 105 | sourceFormat: unstructured 106 | git: 107 | repo: 108 | branch: main 109 | auth: none 110 | ``` 111 | 112 | If need credentials to access repository your repository then 113 | copy the token name from previous section and provide it in 114 | *./rootsync/rootsync.yaml*. 115 | 116 | ```yaml 117 | spec: 118 | sourceFormat: unstructured 119 | git: 120 | repo: 121 | branch: main 122 | auth: token 123 | secretRef: 124 | name: 125 | ``` 126 | 127 | Deploy the modified root-sync 128 | 129 | ```bash 130 | kpt live init rootsync 131 | kpt live apply rootsync --reconcile-timeout=15m --output=table 132 | ``` 133 | 134 | 135 | If the output of `kubectl get rootsyncs.configsync.gke.io -A` 136 | is similar as below then *root-sync* is properly configured. 137 | 138 | ```console 139 | kubectl get rootsyncs.configsync.gke.io -A 140 | NAMESPACE NAME RENDERINGCOMMIT RENDERINGERRORCOUNT SOURCECOMMIT SOURCEERRORCOUNT SYNCCOMMIT SYNCERRORCOUNT 141 | config-management-system mgmt ddc9676c997696d4a102a5cf2c67d0a0c459ceb3 ddc9676c997696d4a102a5cf2c67d0a0c459ceb3 ddc9676c997696d4a102a5cf2c67d0a0c459ceb3 142 | ``` 143 | 144 | ### Add Workload CRDs in Edge workload cluster 145 | 146 | Workload CRDs are required to manage network functions. 147 | 148 | ```bash 149 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/core/workload-crds@origin/v3.0.0 150 | kpt live init workload-crds 151 | kpt live apply workload-crds --reconcile-timeout=15m --output=table 152 | ``` 153 | 154 | ## Deploy packages to the edge clusters 155 | 156 | Using WebUI or command line add a new deployment to the edge workload cluster. 157 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/optional-components.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installing optional Nephio components 3 | description: > 4 | After installing the environment-specific dependencies, and base components, the following optional Nephio 5 | components can be installed. 6 | 7 | weight: 2 8 | --- 9 | 10 | {{% alert title="Note" color="primary" %}} 11 | 12 | If you want to use a version other than that of v3.0.0 of Nephio *catalog* repo, then replace the *@origin/v3.0.0* 13 | suffix on the package URLs on the `kpt pkg get` commands below with the tag/branch of the version you wish to use. 14 | 15 | While using KPT you can [either pull a branch or a tag](https://kpt.dev/book/03-packages/01-getting-a-package) from a 16 | git repository. By default, it pulls the tag. In case, you have branch with the same name as a tag then to: 17 | 18 | ```bash 19 | #pull a branch 20 | kpt pkg get --for-deployment @origin/v3.0.0 21 | #pull a tag 22 | kpt pkg get --for-deployment @v3.0.0 23 | ``` 24 | 25 | {{% /alert %}} 26 | 27 | ## Nephio WebUI 28 | 29 | The Nephio WebUI can be installed using the following 30 | [document](/content/en/docs/guides/install-guides/web-ui/_index.md) 31 | 32 | 33 | ## FluxCD Controllers 34 | 35 | As an alternative Git-ops tool running on the Nephio management cluster, 36 | the following [Flux](https://fluxcd.io/flux/) controllers can be installed. 37 | * [Source Controller](https://fluxcd.io/flux/components/source/) 38 | * [Kustomize Controller](https://fluxcd.io/flux/components/kustomize/) 39 | * [Helm Controller](https://fluxcd.io/flux/components/helm/) 40 | * [Notification Controller](https://fluxcd.io/flux/components/notification/) 41 | 42 | ```bash 43 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/fluxcd@origin/main 44 | kpt fn render fluxcd 45 | kpt live init fluxcd 46 | kpt live apply fluxcd --reconcile-timeout=15m --output=table 47 | ``` 48 | 49 | The controllers are deployed to the *flux-system* namespace by default. 50 | 51 | ```bash 52 | kubectl get po -n flux-system 53 | ``` 54 | Output: 55 | ``` 56 | NAME READY STATUS RESTARTS AGE 57 | helm-controller-69c875c978-85tpx 1/1 Running 0 103s 58 | kustomize-controller-596578b94c-gt999 1/1 Running 0 103s 59 | notification-controller-684c9f69c-hpkkq 1/1 Running 0 103s 60 | source-controller-849cd7dbc6-58ghr 1/1 Running 0 103s 61 | ``` 62 | 63 | ## O2IMS Operator 64 | 65 | Install the operator using the below commands 66 | ```bash 67 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/o2ims@origin/main /tmp/o2ims 68 | kpt fn render /tmp/o2ims 69 | kpt live init /tmp/o2ims 70 | kpt live apply /tmp/o2ims --reconcile-timeout=15m --output=table 71 | ``` 72 | 73 | The operator is deployed to the *o2ims* namespace by default. 74 | 75 | ```bash 76 | kubectl get pods -n o2ims 77 | ``` 78 | Output: 79 | ``` 80 | NAME READY STATUS RESTARTS AGE 81 | o2ims-operator-5595cd78b7-thggl 1/1 Running 0 5h27m 82 | ``` 83 | 84 | ## Focom Operator 85 | 86 | Install the operator using the below commands 87 | ```bash 88 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/focom-operator@origin/main /tmp/focom 89 | kpt fn render /tmp/focom 90 | kpt live init /tmp/focom 91 | kpt live apply /tmp/focom --reconcile-timeout=15m --output=table 92 | ``` 93 | 94 | The operator is deployed to the *focom-operator-system* namespace by default. 95 | 96 | ```bash 97 | kubectl get pods -n focom-operator-system 98 | ``` 99 | Output: 100 | ``` 101 | NAME READY STATUS RESTARTS AGE 102 | focom-operator-controller-manager-d8f4d5cb6-dqqk8 1/1 Running 0 31s 103 | ``` -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/web-ui/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installing the WebUI 3 | description: > 4 | These instructions explain how to install and configure the Nephio WebUI. 5 | weight: 2 6 | --- 7 | 8 | To install the WebUI, we simply install a different *kpt* package. First, we pull the package locally: 9 | 10 | ```bash 11 | kpt pkg get --for-deployment https://github.com/nephio-project/catalog.git/nephio/optional/webui@origin/v3.0.0 12 | ``` 13 | 14 | Before we apply it to the cluster, however, we should configure it. 15 | 16 | By default, it expects the WebUI to be reached via *http://localhost:7007*. If you plan to expose the WebUI via a load 17 | balancer service instead, then you need to configure the scheme, hostname, port, and service. Note that if you wish to 18 | use HTTPS, you should set the *scheme* to *https*, but you will need to terminate the TLS at the load balancer as the 19 | container currently only supports HTTP. 20 | 21 | This information is captured in the application ConfigMap for the WebUI, which is generated by a KRM function. We can 22 | change the values in the *nephio-webui/gen-configmap.yaml* just using a text editor (change the *hostname* and *port* values 23 | under *params:*), and those will take effect later when we run `kpt fn render`. As an alternative to a text editor, you 24 | can run these commands: 25 | 26 | ```bash 27 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-kind GenConfigMap -- 'by-path=params.scheme' 'put-value=SCHEME' 28 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-kind GenConfigMap -- 'by-path=params.hostname' 'put-value=HOSTNAME' 29 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-kind GenConfigMap -- 'by-path=params.port' 'put-value=PORT' 30 | ``` 31 | 32 | If you want to expose the UI via a load balancer service, you can manually change the Service *type* to *LoadBalancer*, 33 | or run: 34 | 35 | ```bash 36 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-kind Service -- 'by-path=spec.type' 'put-value=LoadBalancer' 37 | ``` 38 | 39 | In the default configuration, the Nephio WebUI **is wide open with no authentication**. The WebUI itself authenticates to 40 | the cluster using a static service account, which is bound to the cluster admin role. Any user accessing the WebUI is 41 | **acting as a cluster admin**. 42 | 43 | This configuration is designed for **testing and development only**. You must not use this configuration in any other 44 | situation, and even for testing and development it must not be exposed on the internet (for example, via a LoadBalancer 45 | service). 46 | 47 | Configuring authentication for the WebUI is specific to the particular cluster environment. Guides for different 48 | environments are below: 49 | 50 | - [Google OAuth or OIDC](/content/en/docs/guides/install-guides/web-ui/webui-auth-gcp.md) 51 | - [OIDC with Okta](/content/en/docs/guides/install-guides/web-ui/webui-auth-okta.md) 52 | 53 | Once that configuration is updated, you can proceed with the installation (note, this uses `inventory-policy=adopt`, 54 | since in the previous steps we may have created the namespace already). 55 | 56 | ```bash 57 | kpt fn render nephio-webui 58 | kpt live init nephio-webui 59 | kpt live apply nephio-webui --reconcile-timeout=15m --output=table --inventory-policy=adopt 60 | ``` 61 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/web-ui/webui-auth-gcp.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: WebUI authentication with Google OAuth 2.0 or OIDC 3 | description: > 4 | These instructions explain how to set up the Nephio WebUI to use Google OAuth 2.0 for authentication, or using OIDC 5 | backed by Google authentication. 6 | weight: 7 7 | --- 8 | 9 | 10 | When used with the WebUI running in a GKE cluster, the users authorization roles will be automatically synchronized 11 | based upon their IAM roles in GCP. 12 | 13 | If you are not exposing the WebUI on a load balancer IP address, but are instead using `kubectl port-forward`, you 14 | should use *http*, *localhost* and *7007* for the SCHEME, HOSTNAME and PORT; otherwise, use the scheme, DNS name 15 | and port as it will be seen by your browser. You can leave the port off if it is 443 for HTTPS or 80 for HTTP. 16 | 17 | ## Creating an OAuth 2.0 Client ID 18 | 19 | Google OAuth 2.0 requires a client ID and allows you to authenticate against the GCP identity service. To create your 20 | client ID and secret: 21 | 22 | 1. Sign in to the [Google Console](https://console.cloud.google.com) 23 | 2. Select or create a new project from the dropdown menu on the top bar 24 | 3. Navigate to [APIs & Services > Credentials](https://console.cloud.google.com/apis/credentials) 25 | 4. Click **Create Credentials** and choose **OAuth client ID** 26 | 5. Configure an OAuth consent screen, if required 27 | 28 | - For scopes, select *OpenID*, *auth/userinfo.email*, *auth/userinfo.profile*, and *auth/cloud-platform*. 29 | - Add any users that will want access to the UI if using External user type 30 | 31 | 6. Set **Application Type** to *Web Application* with these settings: 32 | 33 | - **Name**: Nephio Web UI (or any other name you wish) 34 | - **Authorized JavaScript origins**: SCHEME://HOSTNAME:PORT 35 | - **Authorized redirect URIs**: SCHEME://HOSTNAME:PORT/api/auth/google/handler/frame 36 | 37 | 7. Click Create 38 | 8. Copy the client ID and client secret displayed 39 | 40 | ## Create the Secret in the Cluster 41 | 42 | The client ID and client secret need to be added as a Kubernetes secret to your cluster. This can be done via Secrets 43 | Manager or Vault integrations, or you can manually provision the secret (replacing the placeholders here): 44 | 45 | ```bash 46 | kubectl create ns nephio-webui 47 | kubectl create secret generic -n nephio-webui nephio-google-oauth-client --from-literal=client-id=CLIENT_ID_PLACEHOLDER --from-literal=client-secret=CLIENT_SECRET_PLACEHOLDER 48 | ``` 49 | 50 | ## Enable Google OAuth 51 | 52 | The *WebUI* package has a function that will configure the package for authentication with different services. Edit the 53 | *set-auth.yaml* file to set the authProvider field to *google* or run the following command: 54 | 55 | ```bash 56 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=authProvider' 'put-value=google' 57 | ``` 58 | ## Enable OIDC with Google 59 | 60 | The *WebUI* package has a function that will configure the package for authentication with different services. Edit the 61 | *set-auth.yaml* file to set the authProvider field to *oidc* and the oidcTokenProvider to *google*, or run the following 62 | commands: 63 | 64 | ```bash 65 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=authProvider' 'put-value=oidc' 66 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=oidcTokenProvider' 'put-value=google' 67 | ``` 68 | -------------------------------------------------------------------------------- /content/en/docs/guides/install-guides/web-ui/webui-auth-okta.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: WebUI OIDC authentication with Okta 3 | description: > 4 | These instructions explain how to set up the Nephio WebUI to use OIDC with Okta for authentication. 5 | weight: 7 6 | --- 7 | 8 | If you are not exposing the WebUI on a load balancer IP address, but are instead using `kubectl port-forward`, you 9 | should use *localhost* and *7007* for the HOSTNAME and PORT; otherwise, use the DNS name and port as it will be seen 10 | by your browser. 11 | 12 | ## Creating an Okta Application 13 | 14 | Adapted from the [Backstage](https://backstage.io/docs/auth/okta/provider#create-an-application-on-okta) 15 | documentation: 16 | 17 | 1. Log into Okta (generally company.okta.com) 18 | 2. Navigate to **Menu** >> **Applications** >> **Applications** >> **Create App Integration** 19 | 3. Fill out the Create a new app integration form: 20 | 21 | - **Sign-in method**: OIDC - OpenID Connect 22 | - **Application type**: Web Application 23 | - Click **Next** 24 | 25 | 4. Fill out the New Web App Integration form: 26 | 27 | - **App integration name**: Nephio Web UI (or any other name you wish) 28 | - **Grant type**: Authorization Code & Refresh Token 29 | - **Sign-in redirect URIs**: http://HOSTNAME:PORT/api/auth/okta/handler/frame 30 | - **Sign-out redirect URIs**: http://HOSTNAME:PORT 31 | - **Controlled access**: (select as appropriate) 32 | - Click **Save** 33 | 34 | ## Create the Secret in the Cluster 35 | 36 | The values created for the Okta application must be added to a Kubernetes Secret to that they can be added to the 37 | container environment. 38 | 39 | In the secret, use these keys: 40 | 41 | | Key | Description | 42 | | ---------------- | ------------------------------------------------------------------------------- | 43 | | *client-id* | The client ID that you generated on Okta, e.g. 3abe134ejxzF21HU74c1 | 44 | | *client-secret* | The client secret shown for the Application. | 45 | | *audience* | The Okta domain shown for the Application, e.g. *https://www.okta.com/company/* | 46 | | *auth-server-id* | The authorization server ID for the Application (optional) | 47 | | *idp* | The identity provider for the application, e.g. 0oaulob4BFVa4zQvt0g3 (optional) | 48 | 49 | This can be done via a secrets manager or by manually provision the secret (replacing the placeholders here): 50 | 51 | ```bash 52 | kubectl create ns nephio-webui 53 | kubectl create secret generic -n nephio-webui nephio-okta-oauth-client \ 54 | --from-literal=client-id=CLIENT_ID \ 55 | --from-literal=client-secret=CLIENT_SECRET \ 56 | --from-literal=audience=AUDIENCE \ 57 | --from-literal=auth-server-id=AUTH_SERVER_ID \ 58 | --from-literal=idp=IDP 59 | ``` 60 | 61 | ## Enable the WebUI Auth Provider 62 | 63 | The *WebUI* package has a function that will configure the package for authentication with different services. Edit the 64 | *set-auth.yaml* file to set the authProvider field to *oidc* and the oidcTokenProvider to *okta*, or run the following 65 | commands: 66 | 67 | ```bash 68 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=authProvider' 'put-value=oidc' 69 | kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=oidcTokenProvider' 'put-value=okta' 70 | ``` 71 | -------------------------------------------------------------------------------- /content/en/docs/guides/user-guides/helm/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Helm Integration in Nephio 3 | description: > 4 | User's guides about integration Helm to Nephio 5 | weight: 3 6 | --- 7 | 8 | ## Overview 9 | 10 | Although the direction from Nephio is to encourage the use of 11 | [operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) 12 | for deploying on Kubernetes, legacy helm support will be required for a number of releases. 13 | 14 | ### Deployment options 15 | 16 | * [Using Helm To Operator Codegen SDK](/content/en/docs/guides/user-guides/helm/helm-to-operator-codegen-sdk-user-guide.md) 17 | * [Using Flux CD](/content/en/docs/guides/user-guides/helm/flux-helm.md) 18 | * [Operator SDK](https://sdk.operatorframework.io/docs/building-operators/helm/) 19 | 20 | -------------------------------------------------------------------------------- /content/en/docs/guides/user-guides/helm/flux-helm.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Flux CD 3 | description: > 4 | Deploying helm charts in Nephio using Flux CD 5 | weight: 1 6 | --- 7 | 8 | 9 | [Flux CD](https://fluxcd.io/flux/use-cases/helm/) provides a set of Kubernetes controllers to enable a GitOps driven 10 | deployment of helm charts. 11 | 12 | In this example, we deploy the flux [helm](https://fluxcd.io/flux/components/helm/) and 13 | [source](https://fluxcd.io/flux/components/source/) controllers via a kpt package to the target workload cluster. 14 | 15 | Then, we can utilize the flux Custom Resources defined in another test kpt package to deploy an example helm chart. 16 | 17 | ## Prerequisites: 18 | 19 | * [Nephio R1 sandbox]/content/en/docs/guides/install-guides/install-guides/_index.md): Set up the Nephio sandbox environment. 20 | * [Access to the Nephio Web UI](/content/en/docs/guides/install-guides/_index.md#access-to-the-user-interfaces) 21 | * [Nephio R1 sandbox workload clusters](/content/en/docs/guides/user-guides/usecase-user-guides/exercise-1-free5gc.md): 22 | Create/Deploy the predefined set of workload clusters by completing the Free5GC Core quick start exercises up to and including 23 | [Step 3](/content/en/docs/guides/user-guides/usecase-user-guides/exercise-1-free5gc.md#step-3-deploy-two-edge-clusters). 24 | 25 | ### Deploying the flux-helm-controllers pkg 26 | 27 | Access the Nephio WebUI and do following steps: 28 | 29 | We will deploy the *flux-helm-controllers* pkg from the *nephio-example-packages* repository to the *edge02* workload 30 | cluster. 31 | 32 | * **Step 1** 33 | 34 | ![Install flux controllers - Step 1](/static/images/user-guides/nephio-ui-edge02-deployment.png) 35 | 36 | * **Step 2** 37 | 38 | ![Install flux controllers - Step 2](/static/images/user-guides/add-deployment-selection.png) 39 | 40 | * **Step 3** 41 | 42 | ![Install flux controllers - Step 3](/static/images/user-guides/flux-controller-selection.png) 43 | 44 | Click through the ***Next** button until you are through all the steps, leaving all options as default, then click 45 | **Create Deployment**. 46 | 47 | * **Step 4** 48 | 49 | ![Install flux controllers - Step 4](/static/images/user-guides/select-create-deployment.png) 50 | 51 | At this point, we can take a closer look at the contents of the kpt package which contains the relevant Kubernetes 52 | resources to deploy the controllers. 53 | 54 | {{% alert title="Note" color="primary" %}} 55 | 56 | We are deploying into the *flux-system* namespace by default. 57 | 58 | {{% /alert %}} 59 | 60 | Finally, we need to *propose* and then *approve* the pkg to initialize the deployment. 61 | 62 | * **Step 5** 63 | 64 | ![Install flux controllers - Step 5](/static/images/user-guides/propose-selection.png) 65 | 66 | * **Step 6** 67 | 68 | ![Install flux controllers - Step 6](/static/images/user-guides/approve-selection.png) 69 | 70 | Shortly thereafter, you should see flux helm and source controllers in the flux-system namespace: 71 | 72 | ```bash 73 | kubectl get po --context edge02-admin@edge02 -n flux-system 74 | ``` 75 | 76 | The output is similar to: 77 | 78 | ```console 79 | NAME READY STATUS RESTARTS AGE 80 | helm-controller-cccc87cc-zqnd6 1/1 Running 0 6m20s 81 | source-controller-5756bf7d48-hprkn 1/1 Running 0 6m20s 82 | ``` 83 | 84 | 85 | 86 | ### Deploying the onlineboutique-flux pkg 87 | 88 | To make the demo kpt packages available in Nephio, we need to register a new *External Blueprints* repository. We can 89 | do this via *kubectl* towards the management cluster. 90 | 91 | ```bash 92 | cat << EOF | kubectl apply -f - 93 | apiVersion: config.porch.kpt.dev/v1alpha1 94 | kind: Repository 95 | metadata: 96 | name: nordix-nephio-packages 97 | namespace: default 98 | labels: 99 | kpt.dev/repository-access: read-only 100 | kpt.dev/repository-content: external-blueprints 101 | spec: 102 | content: Package 103 | deployment: false 104 | git: 105 | branch: master 106 | directory: /packages 107 | repo: https://github.com/Nordix/nordix-nephio-packages.git 108 | type: git 109 | 110 | EOF 111 | ``` 112 | The new repository should now have been added to the **External Blueprints** section of the UI. 113 | 114 | ![External Blueprints UI](/static/images/user-guides/external-bp-repos.png) 115 | 116 | From here, we can see the onlineboutique-flux pkg to be deployed. 117 | 118 | ![online boutique pkg](/static/images/user-guides/nephio-pkgs-onlineboutique-show.png) 119 | 120 | The HelmRepository Custom Resource within the kpt pkg refers to the official 121 | [online boutique helm charts repository.](https://github.com/GoogleCloudPlatform/microservices-demo/tree/main/helm-chart) 122 | 123 | ![Helm repository online boutique ref](/static/images/user-guides/helmrepo-onlineboutique-ref.png) 124 | 125 | To deploy the pkg, repeat/follow **Steps 1 - 6** from above, replacing **Step 3** with the following. Take note of the 126 | source repository and the package to be deployed. 127 | 128 | ![Add ACM pkg](/static/images/user-guides/add-deploy-onlinebout-select.png) 129 | 130 | {{% alert title="Note" color="primary" %}} 131 | 132 | The overrides online-boutique-values ConfigMap in the package refers to the default *values.yaml* for the 133 | chart and can be customized prior to pkg approval. 134 | 135 | {{% /alert %}} 136 | 137 | Shortly thereafter, you should see the online boutique components deployed in the online-boutique namespace: 138 | 139 | ```bash 140 | kubectl get po --context edge02-admin@edge02 -n online-boutique 141 | ``` 142 | 143 | The output is similar to: 144 | 145 | ```console 146 | NAME READY STATUS RESTARTS AGE 147 | adservice-5464cc8db4-p9sm2 1/1 Running 0 37s 148 | cartservice-6458db7c7c-4scnh 1/1 Running 0 37s 149 | checkoutservice-55b497bfb8-4x8jj 1/1 Running 0 37s 150 | currencyservice-6f868d85d8-fgq6t 1/1 Running 0 37s 151 | emailservice-5cf5fc5898-wzmz8 1/1 Running 0 37s 152 | frontend-56bd99cb9b-thps4 1/1 Running 0 37s 153 | loadgenerator-796b7d99dd-894gx 1/1 Running 0 37s 154 | paymentservice-5ff68d9c7d-74q7c 1/1 Running 0 37s 155 | productcatalogservice-6d9568bddb-8z66q 1/1 Running 0 37s 156 | recommendationservice-c58857d6-qwrkd 1/1 Running 0 37s 157 | redis-cart-7495b4ff99-gbq4m 1/1 Running 0 37s 158 | shippingservice-6f65f85b8b-j5c28 1/1 Running 0 37s 159 | ``` 160 | -------------------------------------------------------------------------------- /content/en/docs/guides/user-guides/operator-controller-guides/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio Operator & Controller Guides 3 | description: > 4 | A collection of guides relating to the controllers and/or operators developed by Nephio. 5 | weight: 2 6 | --- 7 | 8 | 9 | -------------------------------------------------------------------------------- /content/en/docs/guides/user-guides/operator-controller-guides/controllers.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio controller user's guide 3 | description: > 4 | 5 | weight: 2 6 | --- 7 | 8 | ## Reconcilers 9 | 10 | [Reconcilers](https://kubebyexample.com/learning-paths/operator-framework/operator-sdk-go/controller-reconcile-function) 11 | are used by Kubernetes to enforce the desired state of a Custom Resource (CR). 12 | 13 | ## The Nephio Reconciler Interface 14 | 15 | The Nephio Controller deploys multiple reconcilers and also supports pluggable reconcilers. To plug into the Nephio 16 | controller, a reconciler must implement the 17 | [Nephio reconciler interface](https://github.com/nephio-project/nephio/tree/main/controllers/pkg/reconcilers/reconciler-interface). 18 | Reconcilers register with the Nephio reconciler interface when they start up. 19 | 20 | The reconcilers below are currently deployed by default in the Nephio controller: 21 | 22 | ```bash 23 | ./controllers/pkg/reconcilers/token/reconciler.go 24 | ./controllers/pkg/reconcilers/repository/reconciler.go 25 | ./controllers/pkg/reconcilers/bootstrap-packages/reconciler.go 26 | ./controllers/pkg/reconcilers/vlan-specializer/reconciler.go 27 | ./controllers/pkg/reconcilers/generic-specializer/reconciler.go 28 | ./controllers/pkg/reconcilers/network/reconciler.go 29 | ./controllers/pkg/reconcilers/ipam-specializer/reconciler.go 30 | ./controllers/pkg/reconcilers/bootstrap-secret/reconciler.go 31 | ./controllers/pkg/reconcilers/approval/reconciler.go 32 | ``` 33 | 34 | ## Enabling Reconcilers 35 | 36 | To enable a particular reconciler, you pass an environment variable to the 37 | Nephio Controller at startup. The environment variable is of the form 38 | *ENABLE_\* where *\* is the name of the reconciler to 39 | be enabled in upper case. Therefore, to enable the bootstrap-packages reconciler, 40 | pass the ENABLE_BOOTSTRAPPACKAGES to the Nephio controller. Reconcilers are 41 | disabled by default. 42 | 43 | 44 | You can see what reconcilers are enabled on the Nephio Controller using 45 | `kubectl`. 46 | 47 | ```bash 48 | $ kubectl describe pod -n nephio-system nephio-controller-6565fd695d-44kld 49 | 50 | *** Truncated output *** 51 | 52 | Name: nephio-controller-6565fd695d-44kld 53 | Containers: 54 | controller: 55 | Container ID: containerd://37d3eff53c1944a659e5a7ab913173db42f34b44347072e6c9b51e5671f35ea2 56 | Environment: 57 | POD_NAMESPACE: nephio-system (v1:metadata.namespace) 58 | POD_IP: (v1:status.podIP) 59 | POD_NAME: nephio-controller-6565fd695d-44kld (v1:metadata.name) 60 | NODE_NAME: (v1:spec.nodeName) 61 | NODE_IP: (v1:status.hostIP) 62 | GIT_URL: http://172.18.0.200:3000 63 | GIT_NAMESPACE: gitea 64 | ENABLE_APPROVAL: true 65 | ENABLE_REPOSITORIES: true 66 | ENABLE_BOOTSTRAPSECRETS: true 67 | ENABLE_BOOTSTRAPPACKAGES: true 68 | ENABLE_GENERICSPECIALIZER: true 69 | ENABLE_NETWORKS: true 70 | CLIENT_PROXY_ADDRESS: resource-backend-controller-grpc-svc.backend-system.svc.cluster.local:9999 71 | ``` 72 | 73 | To check that the reconcilers are actually deployed, you can examine the logs 74 | from the Nephio Controller. The log rolls over so you may need to redeploy the 75 | Nephio Controller to see what reconcilers are being deployed. 76 | 77 | ```bash 78 | $ kubectl rollout restart deployment nephio-controller -n nephio-system 79 | 80 | $ kubectl logs -n nephio-system nephio-controller-59487989bf-md845 --all-containers | \ 81 | grep enable 82 | 2023-06-27T11:37:58.646Z INFO setup enabled reconcilers {"reconcilers": "repositories,approval,bootstrappackages,bootstrapsecrets,genericspecializer,networks"} 83 | ``` 84 | -------------------------------------------------------------------------------- /content/en/docs/guides/user-guides/usecase-user-guides/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Use Case Guides 3 | description: > 4 | A collection of step by step use case guides for demo purposes. 5 | weight: 3 6 | --- 7 | 8 | 9 | -------------------------------------------------------------------------------- /content/en/docs/network-architecture/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Network Architecture 3 | description: Nephio Release Scope, User Stories and Roadmap 4 | weight: 2 5 | --- 6 | 7 | {{% pageinfo %}} 8 | This section is to formalize the work delivered as part of SIG1 Network Architecture. 9 | {{% /pageinfo %}} 10 | 11 | SIG1 Network Architecture focuses on defining and developing network architecture by identifying and/or exercising Nephio's enablers. The group's work is guided by user stories that capture the needs and priorities of stakeholders, such as network administrators, security officers, engineers, and end-users. 12 | The scope includes establishing guidelines for network design, security protocols, scalability solutions, performance optimization, and providing comprehensive documentation and training. 13 | 14 | This website contains approved content, which is a subset of the material produced by SIG1. Everything is available for anyone's consumption in [Nephio SIG1 Google Drive](https://drive.google.com/drive/u/2/folders/1P4bmDppUIrtBbiRe3fj92xA_qlCMn7sf). -------------------------------------------------------------------------------- /content/en/docs/porch/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Porch documentation" 3 | type: docs 4 | weight: 6 5 | description: Documentation of Porch 6 | --- 7 | 8 | ## Overview 9 | 10 | Porch is “kpt-as-a-service”, providing opinionated package management, manipulation, and lifecycle operations in a 11 | Kubernetes-based API. This allows automation of these operations using standard Kubernetes controller techniques. 12 | 13 | "Porch" is short for "Package Orchestration". 14 | 15 | ## Porch in the Nephio architecture, history and outlook 16 | 17 | Porch is a key component of the Nephio architecture. It was originally developed in the 18 | [kpt](https://github.com/kptdev/kpt) project. When kpt was donated to the [CNCF](https://www.cncf.io/projects/kpt/) it 19 | was decided that Porch would not be part of the kpt project and the code was donated to Nephio. 20 | 21 | Porch is maintained by the Nephio community. Porch will evolve with Nephio and 22 | its architecture and implementation will be updated to meet the functional and non-functional requirements on it 23 | and on Nephio as a whole. -------------------------------------------------------------------------------- /content/en/docs/porch/contributors-guide/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Porch Contributor Guide" 3 | type: docs 4 | weight: 7 5 | description: 6 | --- 7 | 8 | ## Changing Porch API 9 | 10 | If you change the API resources, in `api/porch/.../*.go`, update the generated code by running: 11 | 12 | ```sh 13 | make generate 14 | ``` 15 | 16 | ## Components 17 | 18 | Porch comprises of several software components: 19 | 20 | * [api](https://github.com/nephio-project/porch/tree/main/api): Definition of the KRM API supported by the Porch 21 | extension apiserver 22 | * [porchctl](https://github.com/nephio-project/porch/tree/main/cmd/porchctl): CLI command tool for administration of 23 | Porch `Repository` and `PackageRevision` custom resources. 24 | * [apiserver](https://github.com/nephio-project/porch/tree/main/pkg/apiserver): The Porch apiserver implementation, REST 25 | handlers, Porch `main` function 26 | * [engine](https://github.com/nephio-project/porch/tree/main/pkg/engine): Core logic of Package Orchestration - 27 | operations on package contents 28 | * [func](https://github.com/nephio-project/porch/tree/main/func): KRM function evaluator microservice; exposes GRPC API 29 | * [repository](https://github.com/nephio-project/porch/blob/main/pkg/repository): Repository integration package 30 | * [git](https://github.com/nephio-project/porch/tree/main/pkg/externalrepo/git): Integration with Git repository. 31 | * [oci](https://github.com/nephio-project/porch/tree/main/pkg/externalrepo/oci): Integration with OCI repository. 32 | * [cache](https://github.com/nephio-project/porch/tree/main/pkg/cache): Package caching. 33 | * [controllers](https://github.com/nephio-project/porch/tree/main/controllers): `Repository` CRD. No controller; 34 | Porch apiserver watches these resources for changes as repositories are (un-)registered. 35 | * [test](https://github.com/nephio-project/porch/tree/main/test): Test Git Server for Porch e2e testing, and 36 | [e2e](https://github.com/nephio-project/porch/tree/main/test/e2e) tests. 37 | 38 | ## Running Porch 39 | 40 | See dedicated documentation on running Porch: 41 | 42 | * [locally](../running-porch/running-locally.md) 43 | * [on GKE](../running-porch/running-on-GKE.md) 44 | 45 | ## Build the Container Images 46 | 47 | Build Docker images of Porch components: 48 | 49 | ```sh 50 | # Build Images 51 | make build-images 52 | 53 | # Push Images to Docker Registry 54 | make push-images 55 | 56 | # Supported make variables: 57 | # IMAGE_TAG - image tag, i.e. 'latest' (defaults to 'latest') 58 | # GCP_PROJECT_ID - GCP project hosting gcr.io repository (will translate to gcr.io/${GCP_PROJECT_ID}) 59 | # IMAGE_REPO - overwrites the default image repository 60 | 61 | # Example: 62 | IMAGE_TAG=$(git rev-parse --short HEAD) make push-images 63 | ``` 64 | 65 | ## Running Locally 66 | 67 | Follow the [Running Porch Locally](../running-porch/running-locally.md) guide to run Porch locally. 68 | 69 | ## Debugging 70 | 71 | To debug Porch, run Porch locally [running-locally.md](../running-porch/running-locally.md), exit porch server running 72 | in the shell, and launch Porch under the debugger. VS Code debug session is pre-configured in 73 | [launch.json](https://github.com/nephio-project/porch/blob/main/.vscode/launch.json). 74 | 75 | Update the launch arguments to your needs. 76 | 77 | ## Code Pointers 78 | 79 | Some useful code pointers: 80 | 81 | * Porch REST API handlers in [registry/porch](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch), 82 | for example [packagerevision.go](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch/packagerevision.go) 83 | * Background task handling cache updates in [background.go](https://github.com/nephio-project/porch/tree/main/pkg/registry/porch/background.go) 84 | * Git repository integration in [pkg/git](https://github.com/nephio-project/porch/tree/main/pkg/externalrepo/git) 85 | * OCI repository integration in [pkg/oci](https://github.com/nephio-project/porch/tree/main/pkg/externalrepo/oci) 86 | * CaD Engine in [engine](https://github.com/nephio-project/porch/tree/main/pkg/engine) 87 | * e2e tests in [e2e](https://github.com/nephio-project/porch/tree/main/test/e2e). See below more on testing. 88 | 89 | ## Running Tests 90 | 91 | All tests can be run using `make test`. Individual tests can be run using `go test`. 92 | End-to-End tests assume that Porch instance is running and `KUBECONFIG` is configured 93 | with the instance. The tests will automatically detect whether they are running against 94 | Porch running on local machine or k8s cluster and will start Git server appropriately, 95 | then run test suite against the Porch instance. 96 | 97 | ## Makefile Targets 98 | 99 | * `make generate`: generate code based on Porch API definitions (runs k8s code generators) 100 | * `make tidy`: tidies all Porch modules 101 | * `make fmt`: formats golang sources 102 | * `make build-images`: builds Porch Docker images 103 | * `make push-images`: builds and pushes Porch Docker images 104 | * `make deployment-config`: customizes configuration which installs Porch 105 | in k8s cluster with correct image names, annotations, service accounts. 106 | The deployment-ready configuration is copied into `./.build/deploy` 107 | * `make deploy`: deploys Porch in the k8s cluster configured with current kubectl context 108 | * `make push-and-deploy`: builds, pushes Porch Docker images, creates deployment configuration, and deploys Porch 109 | * `make` or `make all`: builds and runs Porch [locally](../running-porch/running-locally.md) 110 | * `make test`: runs tests 111 | 112 | ## VS Code 113 | 114 | [VS Code](https://code.visualstudio.com/) works really well for editing and debugging. 115 | Just open VS Code from the root folder of the Porch repository and it will work fine. The folder contains the needed 116 | configuration to Launch different functions of Porch. 117 | -------------------------------------------------------------------------------- /content/en/docs/porch/function-runner-pod-templates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Function runner pod templating" 3 | type: docs 4 | weight: 4 5 | description: 6 | --- 7 | 8 | ## Why 9 | 10 | `porch-fn-runner` implements a simplistic function-as-a-service for executing kpt functions, running the needed kpt 11 | functions wrapped in a GRPC server. The function is starting up a number of function evaluator pods for each of the kpt 12 | functions. As with any operator that manages pods, it's good to provide some templating and parametrization capabilities 13 | of the pods that will be managed by the function runner. 14 | 15 | ## Contract for writing pod templates 16 | 17 | The following contract needs to be fulfilled by any function evaluator pod template: 18 | 19 | 1. There is a container named "function". 20 | 2. The entrypoint of the "function" container will start the wrapper GRPC server. 21 | 3. The image of the "function" container can be set to the kpt function's image without impacting starting the 22 | entrypoint. 23 | 4. The arguments of the "function" container can be appended with the entries from the Dockerfile ENTRYPOINT of the kpt 24 | function image. 25 | 26 | ## Enabling pod templating on function runner 27 | 28 | A ConfigMap with the pod template should be created in the namespace where the porch-fn-runner pod is running. 29 | The ConfigMap's name should be included as `--function-pod-template` in the command line arguments in the pod spec of the function runner. 30 | 31 | ```yaml 32 | ... 33 | spec: 34 | serviceAccountName: porch-fn-runner 35 | containers: 36 | - name: function-runner 37 | image: gcr.io/example-google-project-id/porch-function-runner:latest 38 | imagePullPolicy: IfNotPresent 39 | command: 40 | - /server 41 | - --config=/config.yaml 42 | - --functions=/functions 43 | - --pod-namespace=porch-fn-system 44 | - --function-pod-template=kpt-function-eval-pod-template 45 | env: 46 | - name: WRAPPER_SERVER_IMAGE 47 | value: gcr.io/example-google-project-id/porch-wrapper-server:latest 48 | ports: 49 | - containerPort: 9445 50 | # Add grpc readiness probe to ensure the cache is ready 51 | readinessProbe: 52 | exec: 53 | command: 54 | - /grpc-health-probe 55 | - -addr 56 | - localhost:9445 57 | ... 58 | ``` 59 | 60 | ## Example pod template 61 | 62 | The below pod template ConfigMap matches the default behavior: 63 | 64 | ```yaml 65 | apiVersion: v1 66 | kind: ConfigMap 67 | metadata: 68 | name: kpt-function-eval-pod-template 69 | data: 70 | template: | 71 | apiVersion: v1 72 | kind: Pod 73 | annotations: 74 | cluster-autoscaler.kubernetes.io/safe-to-evict: true 75 | spec: 76 | initContainers: 77 | - name: copy-wrapper-server 78 | image: gcr.io/example-google-project-id/porch-wrapper-server:latest 79 | command: 80 | - cp 81 | - -a 82 | - /wrapper-server/. 83 | - /wrapper-server-tools 84 | volumeMounts: 85 | - name: wrapper-server-tools 86 | mountPath: /wrapper-server-tools 87 | containers: 88 | - name: function 89 | image: image-replaced-by-kpt-func-image 90 | command: 91 | - /wrapper-server-tools/wrapper-server 92 | volumeMounts: 93 | - name: wrapper-server-tools 94 | mountPath: /wrapper-server-tools 95 | volumes: 96 | - name: wrapper-server-tools 97 | emptyDir: {} 98 | ``` -------------------------------------------------------------------------------- /content/en/docs/porch/running-porch/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Running Porch" 3 | type: docs 4 | weight: 6 5 | description: 6 | --- 7 | 8 | -------------------------------------------------------------------------------- /content/en/docs/porch/running-porch/running-locally.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Running Porch Locally" 3 | type: docs 4 | weight: 1 5 | description: 6 | --- 7 | 8 | ## Prerequisites 9 | 10 | To run Porch locally, you will need: 11 | 12 | * Linux machine (technically it is possible to run Porch locally on a Mac but 13 | due to differences in Docker between Linux and Mac, the Porch scripts are 14 | confirmed to work on Linux) 15 | * [go 1.23.5](https://go.dev/dl/) or newer 16 | * [docker](https://docs.docker.com/get-docker/) 17 | * [git](https://git-scm.com/) 18 | * [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) 19 | * [make](https://www.gnu.org/software/make/) 20 | 21 | ## Getting Started 22 | 23 | Clone the porch repository. 24 | 25 | ```sh 26 | git clone https://github.com/nephio-project/porch.git 27 | ``` 28 | 29 | Download dependencies: 30 | 31 | ```sh 32 | cd porch 33 | 34 | make tidy 35 | ``` 36 | 37 | ## Running Porch 38 | 39 | Porch consists of: 40 | * k8s extension apiserver [porch](https://github.com/nephio-project/porch/tree/main/pkg/apiserver) 41 | * kpt function evaluator [func](https://github.com/nephio-project/porch/tree/main/func) 42 | * k8s [controllers](https://github.com/nephio-project/porch/tree/main/controllers) 43 | 44 | In addition, to run Porch locally, we need to run the main k8s apiserver and its backing storage, etcd. 45 | 46 | To build and run Porch locally in one command, run: 47 | 48 | ```sh 49 | # Start Porch in one command: 50 | make all 51 | ``` 52 | 53 | This will: 54 | 55 | * create Docker network named *porch* 56 | * build and start etcd Docker container 57 | * build and start main k8s apiserver Docker container 58 | * build and start the kpt function evaluator microservice 59 | [func](https://github.com/nephio-project/porch/tree/main/func) Docker container 60 | * build Porch binary and run it locally 61 | * configure Porch as the extension apiserver 62 | 63 | {{% alert title="Note" color="primary" %}} 64 | 65 | This command does not build and start the Porch k8s controllers. Those 66 | are not required for basic package orchestration but are required for deploying packages. 67 | 68 | {{% /alert %}} 69 | 70 | You can also run the commands individually which can be useful when developing, 71 | in particular building and running Porch extension apiserver. 72 | 73 | ```sh 74 | # Create Porch network 75 | make network 76 | 77 | # Build and start etcd container 78 | make start-etcd 79 | 80 | # Build and start main apiserver container 81 | make start-kube-apiserver 82 | 83 | # Build and start kpt function evaluator microservice Docker container 84 | make start-function-runner 85 | 86 | # Build and start Porch on your local machine. 87 | make run-local 88 | ``` 89 | 90 | Porch will run directly on your local machine and API requests will be forwarded to it from the 91 | main apiserver. Configure `kubectl` context to interact with the main k8s apiserver running as 92 | Docker container: 93 | 94 | ```sh 95 | export KUBECONFIG=${PWD}/deployments/local/kubeconfig 96 | 97 | # Confirm Porch is running 98 | kubectl api-resources | grep porch 99 | 100 | packagerevs config.porch.kpt.dev/v1alpha1 true PackageRev 101 | repositories config.porch.kpt.dev/v1alpha1 true Repository 102 | packagerevisionresources porch.kpt.dev/v1alpha1 true PackageRevisionResources 103 | packagerevisions porch.kpt.dev/v1alpha1 true PackageRevision 104 | packages porch.kpt.dev/v1alpha1 true PorchPackage 105 | ``` 106 | 107 | ## Restarting Porch 108 | 109 | If you make code changes, an expedient way to rebuild and restart porch is: 110 | 111 | * Stop Porch running in the shell session (Ctrl+C) 112 | * Run `make run-local` again to rebuild and restart Porch 113 | 114 | ## Stopping Porch 115 | 116 | To stop Porch and all associated Docker containers, including the Docker network, run: 117 | 118 | ```sh 119 | make stop 120 | ``` 121 | 122 | ## Troubleshooting 123 | 124 | If you run into issues that look like *git: authentication required*, make sure you have SSH 125 | keys set up on your local machine. 126 | -------------------------------------------------------------------------------- /content/en/docs/porch/user-guides/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Porch user guides" 3 | type: docs 4 | weight: 6 5 | description: 6 | --- 7 | 8 | -------------------------------------------------------------------------------- /content/en/docs/release-notes/R1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio R1 Release Notes 3 | weight: 1 4 | --- 5 | 6 | ## Overview 7 | 8 | ## Prerequisites 9 | 10 | See the [Install Guide](/content/en/docs/guides/install-guides/_index.md) 11 | for the prerequisites for the supported environments. 12 | 13 | ## Support matrix 14 | 15 | The sandbox environment requires a physical or virtual machine with the following: 16 | - Ubuntu-20.04-focal Linux 17 | - 8 cores 18 | - 32 GB memory 19 | - 200 GB disk size 20 | - default user with sudo passwordless permissions 21 | 22 | This install has been verified on VMs running on Google Cloud, OpenStack, AWS, 23 | vSphere, and Azure. It has also been verified on Vagrant VMs running on Windows 24 | and Linux. 25 | 26 | For non-sandbox installations, any conforming Kubernetes cluster is sufficient 27 | for the management cluster. 28 | 29 | ## Features 30 | 31 | ### API 32 | 33 | CRDs are provided for the UPF, SMF, and AMF 5G Core services. 34 | 35 | ### Web UI 36 | 37 | Nephio has a basic Web UI to view and manage the packages, as well as the 38 | resources contained in the packages. 39 | 40 | ### Packages 41 | 42 | The following packages are supported: 43 | 44 | * Kpt packages for all [free5GC](https://free5gc.org/) services. 45 | * Packages for the core Nephio services. 46 | * Packages for the Cluster API services, for cluster creation. 47 | * Packages for the dependent services. 48 | 49 | ### Functionalities 50 | 51 | The following functionalities are supported: 52 | 53 | * Create Kubernetes clusters. This functionality is based on the Cluster API. 54 | Currently, only Kubernetes in Docker (KIND) cluster creation is supported. 55 | * Fully automated deployment of the UPF, SMF, and AMF services of 56 | [free5GC](https://free5gc.org/). These are deployed on multiple clusters 57 | based on the user's intent, expressed via the CRDs. 58 | * Deployment of other free5GC functions. 59 | * Autoscaling up of the UPF, SMF, and AMF services based on changes to the capacity 60 | requirements expressed as user intent. 61 | 62 | ## Limitations 63 | 64 | The following limitations need to be borne in mind: 65 | 66 | * For infrastructure automation, only the creation of KIND clusters is 67 | supported. 68 | * Inter cluster networking is not dynamic. Therefore, as more clusters are 69 | deployed, some manual tweaking will be needed for inter cluster communications. 70 | * Provisioning of VLAN interfaces on nodes is currently performed manually. 71 | * Feedback of workload deployments from workload clusters to the management 72 | cluster is limited. You may need to connect directly to the workload cluster 73 | via kubectl to debug any deployment issues. 74 | * Web UI features are limited to the viewing and editing of packages, as well as 75 | the resources in those packages and their deployment. Additional features will 76 | be added in subsequent releases. 77 | * When the capacities of the UPF, SMF, and AMF NFs are changed, the free5GC 78 | Operator on the workload cluster will instantiate a new POD with correspondingly 79 | modified resources (CPU, memory, and so on). During this process, the POD will 80 | restart. This is a limitation of free5GC. 81 | * Only Gitea works with automated cluster provisioning to create new 82 | repositories and join them to Nephio. To use a different Git provider, you 83 | must manually provision the cluster repositories, register them to the Nephio 84 | management server, and set up configsync on the workload cluster. 85 | * In the current demo configuration, the Web UI does not require authentication. 86 | Testing of the Web UI with authentication configured has not yet been done. 87 | * The Web UI only shows resources in the default namespace. 88 | * While many types of Git authentication are supported, testing has only been 89 | done with token-based Git authentication in Gitea. 90 | 91 | ## Known issues and workarounds 92 | 93 | * When deploying the sandbox environment on an Ubuntu VM running on OpenStack, 94 | the deployment may fail. Reinstalling the packages will get around this issue. 95 | * Packages may take time to be approved by the auto-approval controller. If they 96 | appear to have frozen, it may help to restart the Porch and the Nephio 97 | controllers using the following commands: 98 | 99 | ```bash 100 | kubectl -n porch-system rollout restart deploy porch-server 101 | kubectl -n nephio-system rollout restart deploy nephio-controller 102 | ``` 103 | * Occasional calls to `kpt alpha rpkg copy` may fail with the following message, 104 | or similar: 105 | 106 | `Error: Internal error occurred: error applying patch: conflict: fragment line 107 | does not match src line`. 108 | 109 | If such a message appears, then retry in a little while, as this error may 110 | resolve itself. Restarting Porch may also help. 111 | -------------------------------------------------------------------------------- /content/en/docs/release-notes/R2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Nephio R2 Release Notes 3 | weight: 1 4 | --- 5 | 6 | ## Overview 7 | 8 | ## Prerequisites 9 | 10 | Refer to the [Install Guide](/content/en/docs/guides/install-guides/install-on-byoc.md#prerequisites) 11 | for the prerequisites for supported environments. 12 | 13 | ## Support matrix 14 | 15 | The sandbox environment requires a physical or virtual machine with the following: 16 | - Ubuntu-20.04-focal or Ubuntu 22.04 Linux Or Fedora 34 17 | - a minimum of eight cores and a recommended 16 cores (these are needed for end-to-end testing with RAN and core) 18 | - 32 GB memory 19 | - 200 GB disk size 20 | - a default user with sudo passwordless permissions 21 | 22 | This installation has been verified on VMs running on Google Cloud. 23 | 24 | A Nephio sandbox can be created on any Kubernetes cluster v1.26 and above. 25 | 26 | ## Features 27 | 28 | ### API 29 | 30 | Common CRDs are provided for 5G Core and RAN services. 31 | 32 | ### Web UI 33 | 34 | Nephio has a basic web UI to view and manage the packages, and the resources contained in 35 | the packages. 36 | 37 | ### Packages 38 | 39 | The following packages are supported: 40 | 41 | * Kpt packages for all [free5GC](https://free5gc.org/) services 42 | * Kpt packages for all [OAI](https://openairinterface.org/) services 43 | * Packages for the core Nephio services 44 | * Packages for the Cluster API services for cluster creation 45 | * Packages for the dependent services 46 | 47 | ### Functionalities 48 | 49 | The following functionalities are supported: 50 | 51 | * Multivendor support 52 | * API changes 53 | * Generalization 54 | * Parameterization 55 | * Reuse of parameters 56 | * Multicloud support 57 | * Sandbox 58 | * GCP 59 | * OpenShift 60 | * OAI components 61 | * Deploying OAI 5G Core and RAN Network Functions (CU-CP, CU-UP, RF Simulated DU). 62 | * OAI 5G Core network functions are developed using Python Kubernetes Operator Framework (KOPF). 63 | * End-to-end call with RF Simulated OAI-NR-UE. 64 | * Integration with new release of Porch 65 | * Porch is now part of Nephio and is hosted in the Nephio repository. 66 | * Stability. 67 | * Security. 68 | * Repository watcher changes. 69 | * Documentation 70 | * New web-based documentation. 71 | * Experimental 72 | * Nephio SDK. 73 | * Flux-based deployment of Helm charts. 74 | * Helm-to-operator converter. 75 | * Topology Controller - Northbound API to express the network topology. 76 | 77 | 78 | ### Fixes 79 | 80 | The following fixes are available: 81 | 82 | * Removing rigid dependency on Gitea. 83 | * Upgrading the Multus version. 84 | * ConfigMap generator function. 85 | * Web UI configuration options for authentication. 86 | * Reorganizing the package catalog. 87 | * Reducing the hard coding of the NF parameters. 88 | * Stability of end-to-end tests. 89 | * Porch improvements. 90 | * Documentation enhancements. 91 | 92 | ## Limitations 93 | 94 | The following limitations need to be borne in mind: 95 | 96 | * For infrastructure automation, only the creation of KIND clusters is supported. 97 | * Inter-cluster networking is not dynamic. Therefore, as more clusters are deployed, 98 | some manual tweaking will be needed for inter-cluster communications. 99 | * Provisioning of VLAN interfaces on nodes is currently performed manually. 100 | * Feedback of workload deployments from workload clusters to the management cluster 101 | is limited. You may need to connect directly to the workload cluster via kubectl to 102 | debug any deployment issues. 103 | * Web UI features are limited to the viewing/editing of packages and resources in those 104 | packages and their deployment. Additional features will be added in subsequent releases. 105 | * When the capacities of the UPF, SMF, and AMF NFs are changed, the free5GC Operator on 106 | the workload cluster will instantiate a new POD with correspondingly modified resources 107 | (CPU, memory, and so on). During this process, the POD will restart. This is a 108 | limitation of free5GC. 109 | * Only Gitea works with automated cluster provisioning to create new repositories and 110 | join them to Nephio. To use a different Git provider, you must manually provision the 111 | cluster repositories, register them to the Nephio management server, and set up configsync on the workload cluster. 112 | * In the current demo configuration, the Web UI does not require authentication. Testing 113 | of the Web UI with authentication configured has not yet been done. 114 | * The Web UI only shows resources in the default namespace. 115 | * While many types of Git authentication are supported, testing has only been done with 116 | token-based Git authentication in Gitea. 117 | 118 | ## Known issues and workarounds 119 | 120 | * Packages may take time to be approved by the auto-approval controller. If they appear to have 121 | frozen, it may help to restart Porch and the Nephio controllers using the following commands: 122 | ```bash 123 | kubectl -n porch-system rollout restart deploy porch-server 124 | kubectl -n nephio-system rollout restart deploy nephio-controller 125 | ``` 126 | * Occasional calls to `porchctl rpkg copy` may fail with the following message, or similar: 127 | `Error: Internal error occurred: error applying patch: conflict: fragment line 128 | does not match src line`. 129 | If such a message appears, then retry in a little while, as this error may resolve itself. Restarting 130 | Porch may also help. 131 | * During specialization, we may have duplicate parameterRef extensions, leading to failed deployments 132 | (the wrong configurations are generated). The current workaround is to redeploy the package. The bug is 133 | due to the NFDeploy reconciliation not being idempotent. 134 | 135 | * The free5GC operator may create duplicate entries in the SMF function configuration. This will not do 136 | any harm, but is nevertheless incorrect. 137 | * Links in the documentation may not render in GitHub, due to the limitations of the tool being used for 138 | web-based documentation. 139 | -------------------------------------------------------------------------------- /content/en/docs/release-notes/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Release Notes 3 | description: Release Notes 4 | weight: 1 5 | --- -------------------------------------------------------------------------------- /content/en/featured-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/content/en/featured-background.jpg -------------------------------------------------------------------------------- /default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /diagrams/src/level1-nephio-system.puml: -------------------------------------------------------------------------------- 1 | @startuml nephio-system 2 | !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml 3 | 4 | ' External actors 5 | 6 | Boundary(persons, "Personas"){ 7 | Person(desginer, "Designer", "Creates the Network Function packages") 8 | Person(networkEng, "Network Engineer", "Implements and instantiates the Network Function") 9 | } 10 | Boundary(service_orchestrators, "Service Orchestration") { 11 | System_Ext(core_service_orchestrator, "Core Service Orchestrator", "Core Domain service orchestrator" ) 12 | System_Ext(oran_service_orchestrator, "O-RAN Service Orchestrator (SMO)", "RAN domain service orchestrator") 13 | } 14 | System_Ext(cicd_system, "GitOps, CI/CD", "Verifies workloads and packages before onboarding to Nephio, or using Nephio as part of their operations") 15 | 16 | ' Core Nephio function 17 | System(nephio, "Nephio", "Kubernetes-based cloud native automation system, supporting deployment and management of multi-vendor cloud infrastructure and network functions across large scale edge deployments") 18 | 19 | ' Southbound dependencies 20 | System_Ext(supported_nfs, "Supported network functions", "Network functions supported by Nephio (currently free5gc and OAI, with other vendors implementing support independently)") 21 | Boundary(infrastructure, "Infrastructure") { 22 | System_Ext(clouds, "Cloud Providers", "Providers of Kubernetes clusters, such as GCP / Openshift and local kind clusters") 23 | System_Ext(network_fabric, "Network Fabric", "Data Center network fabric elements, such as Nokia SR Linux") 24 | } 25 | 26 | ' Actor - nephio relationships 27 | Rel_D(persons, nephio, "Create Network Topology, K8s Cluster and Network Function Intent") 28 | Rel_D(service_orchestrators, nephio, "Generate Network Topology, K8s Cluster and Network Function Intent") 29 | Rel_R(cicd_system, nephio, "Reconcile, Integrate or Deploy external artifacts") 30 | 31 | ' Nephio - managed entity relationships 32 | Rel_D(nephio, infrastructure, "Manage Network Topology and K8s Cluster Lifecycle (e.g. O2-IMS)") 33 | Rel_D(nephio, supported_nfs, "Manage Network Functions Lifecycle") 34 | Rel_D(supported_nfs, clouds, "Execute on cloud infrastructure") 35 | 36 | @enduml 37 | -------------------------------------------------------------------------------- /diagrams/src/level2-nephio-container.puml: -------------------------------------------------------------------------------- 1 | @startuml nephio-container 2 | !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml 3 | 4 | ' External actors 5 | Person(admin, "Administrator", "Administrator of networks, cloud infrastructure or both") 6 | Boundary(service_orchestrators, "Service Orchestration") { 7 | System_Ext(core_service_orchestrator, "Core Service Orchestrator", "Core Domain service orchestrator") 8 | System_Ext(oran_service_orchestrator, "O-RAN Service Orchestrator (SMO)", "RAN domain service orchestrator") 9 | } 10 | Lay_R(admin, service_orchestrators) 11 | System_Ext(cicd_system, "GitOps, CI/CD", "Verifies workloads and packages before onboarding to Nephio, or using Nephio as part of their operations") 12 | 13 | System_Boundary(nephio, "Nephio") { 14 | Container(web_ui, "Web UI", "Backstage-based web application providing Nephio Packages management via web browser") 15 | Container(porch, "Porch", "kpt as a Service", "Package Orchestration Server is a K8s extension apiserver which manages the lifecycle of KRM configuration packages") 16 | Container(nephio_core, "Nephio Core", "K8s Operators", "Responsible for handling different aspects of workload and cluster specialisation and actuation") 17 | Container(K8s_api, "Kubernetes API Server", "K8s Control Plane", "A component of the Kubernetes control plane that exposes the Kubernetes API. The API server is the front end for the Kubernetes control plane") 18 | Container_Ext(configsync, "Reconciliation Engine", "GitOps Engine", "GitOps service which lets administrators deploy configurations from a source of truth, with the flexibility to support one or many clusters in a hybrid or multi-cloud environment") 19 | ContainerDb_Ext(gitrepomgr, "Git Repository Manager", "git", "System for hosting git repositories and supporting remote branch management and merging") 20 | Container(network_function_controllers, "Network Function Controllers", "K8s Operators", "Manage the lifecycle of Network Functions; Nephio currently supports OAI Core and RAN, and Free5GC") 21 | } 22 | 23 | ' Southbound dependencies 24 | System_Ext(supported_nfs, "Supported Network Functions", "Network functions supported by Nephio (currently free5gc and OAI, with other vendors implementing support independently)") 25 | Boundary(infrastructure, "Infrastructure") { 26 | System_Ext(clouds, "Cloud Providers", "Providers of Kubernetes clusters, such as GCP / Openshift and local kind clusters") 27 | System_Ext(network_fabric, "Network Fabric", "Data Center network fabric elements, such as Nokia SR Linux") 28 | } 29 | 30 | ' Actor - nephio relationships 31 | Rel_D(admin, K8s_api, "Create Network Topology, K8s Cluster and Network Function Intent") 32 | Rel_D(admin, web_ui, "Manage Lifecycle of Nephio Blueprints and Packages") 33 | Rel_D(service_orchestrators, K8s_api, "Generate Network Topology, K8s Cluster and Network Function Intent") 34 | Rel_L(cicd_system, K8s_api, "Reconcile, Integrate or Deploy external artifacts") 35 | Lay_L(K8s_api, cicd_system) 36 | 37 | Rel_D(web_ui, K8s_api, "Use the K8s API to read/write Porch resources") 38 | 39 | ' Porch relations 40 | BiRel_L(porch, K8s_api, "Manage PackagesVariants / PackageRevisions API") 41 | Rel_D(porch, gitrepomgr, "Lifecycle KRM packages") 42 | 43 | ' ConfigSync relations 44 | Rel_L(configsync, gitrepomgr, "Reconcile K8s resources") 45 | Rel_U(configsync, K8s_api, "Apply K8s resources") 46 | 47 | ' Nephio core relations 48 | BiRel_U(nephio_core, K8s_api, "Consume and Create K8s resources") 49 | BiRel_U(network_function_controllers, K8s_api, "Consume and Create K8s resources") 50 | Lay_L(network_function_controllers, configsync) 51 | Lay_L(nephio_core, network_function_controllers) 52 | 53 | 54 | ' Nephio - managed entity relationships 55 | Rel_D(nephio_core, infrastructure, "Manage Network Topology and K8s Cluster Lifecycle (e.g. O2-IMS)") 56 | Rel_D(network_function_controllers, supported_nfs, "Manage Network Functions Lifecycle") 57 | 58 | 59 | ' Workload relations 60 | Rel_D(supported_nfs, clouds, "Execute on cloud infrastructure") 61 | 62 | @enduml -------------------------------------------------------------------------------- /diagrams/src/level3-nephio-core-component.puml: -------------------------------------------------------------------------------- 1 | @startuml nephio-core-component 2 | !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml 3 | 4 | System_Boundary(nephio, "Nephio") { 5 | ' Container(web_ui, "Web UI", "Backstage-based web application providing Nephio Packages management via web browser") 6 | ' Container(porch, "Porch", "kpt as a Service", "Package Orchestration Server is a K8s extension apiserver which manages the lifecycle of KRM configuration packages") 7 | Container(K8s_api, "Kubernetes API Server", "K8s Control Plane", "A component of the Kubernetes control plane that exposes the Kubernetes API. The API server is the front end for the Kubernetes control plane") 8 | ' Container(configsync, "ConfigSync", "GitOps Engine", "GitOps service which lets administrators deploy configurations from a source of truth, with the flexibility to support one or many clusters in a hybrid or multi-cloud environment") 9 | Container(gitrepomgr, "Git Repository Manager", "git", "System for hosting git repositories and supporting remote branch management and merging") 10 | Container(network_function_controllers, "Network Function Controllers", "K8s Operators", "Manage the lifecycle of Network Functions; Nephio currently supports OAI Core and RAN, and Free5GC") 11 | 12 | Container_Boundary(nephio_core, "Nephio Core") { 13 | 14 | ContainerDb(inventory, "Inventory", "datastore", "inventory Network Configuration or Token") 15 | 16 | Container_Boundary(nephio_core_api, "Nephio Core APIs") { 17 | Component(workload_crd, "Workload", "CRD", "Defines NFConfigs, NFDeployments, and AMF UPF and SMF Network Functions") 18 | ' Component(requirements_crd, "Requirements", "CRD", "Defines Capacities, DataNetworks, and Interfaces") 19 | Component(infrastructure_crd, "Infrastructure", "CRD", "Defines Workload Cluster, Tokens, Repositories, Networks, and NetworkConfigs") 20 | Component(inventory_crd, "Inventory", "CRD", "Defines Endpoints, Links, Nodes, and Targets") 21 | Component(resources_crd, "Resources", "CRD", "Defines IPClaim, IPPrefix, NetworkInstances, VlanClaims, VlanIndices, and Vlans") 22 | Component(config_crd, "Config", "CRD", "Defines Networks configuration") 23 | ' Component(topology_crd, "Topology", "CRD", "Defines RawTopologies configuration") 24 | ' Component(ref_crd, "Reference", "CRD", "Defines Config reference") 25 | } 26 | 27 | Container_Boundary(nephio_core_controllers, "Nephio Core Controllers") { 28 | Component(cluster_controller, "K8S Cluster ", "K8s reconcilier", "Controller responsible for reconciling cluster definitions with running clusters") 29 | Component(network_controller, "Network", "K8s reconcilier", "Controller responsible for reconciling Network attachment definitions") 30 | Component(resource_backend, "Resource Backend", "K8s reconcilier") 31 | Component(token, "Token", "K8s reconcilier", "Controller for handling security tokens") 32 | Component(bootstrap_package, "Bootstrap Package", "K8s reconcilier", "Controller for bootstrapping onboarded packages") 33 | Component(repository, "Repository", "K8s reconcilier", "Controller for reconciling repository definitions") 34 | } 35 | } 36 | } 37 | 38 | ' Southbound dependencies 39 | System_Ext(supported_nfs, "Supported Network Functions", "Network functions supported by Nephio (currently free5gc and OAI, with other vendors implementing support independently)") 40 | Boundary(infrastructure, "Infrastructure") { 41 | System_Ext(clouds, "Cloud Providers", "Providers of Kubernetes clusters, such as GCP / Openshift and local kind clusters") 42 | System_Ext(network_fabric, "Network Fabric", "Data Center network fabric elements, such as Nokia SR Linux") 43 | } 44 | 45 | Lay_D(inventory, infrastructure) 46 | 47 | 48 | Rel_D(K8s_api, nephio_core_api, "Allow users to manage Custom Resource instances for the exposed Custom Resource Definitions") 49 | 50 | Rel_D(infrastructure_crd, cluster_controller, "Manage K8s Clusters") 51 | Rel_D(infrastructure_crd, token, "Manage Tokens") 52 | Rel_D(infrastructure_crd, repository, "Manage Repositories") 53 | Rel_D(infrastructure_crd, network_controller, "Manage Network Configurations") 54 | 55 | Rel_U(network_controller, config_crd, "Generate Network Function configuration") 56 | BiRel_D(resources_crd, resource_backend, "Manage resources assignement") 57 | BiRel_D(workload_crd, network_function_controllers, "Manage Network Function lifecycle") 58 | BiRel_D(workload_crd, network_controller, "Manage Network Function configuration") 59 | 60 | Rel_R(repository, gitrepomgr, "Manage Git repositories programatically") 61 | 62 | Rel_U(resource_backend, inventory_crd, "Generate inventory resources") 63 | Rel_D(resource_backend, inventory, "Create and manage IP and VLAN index, claim and assignement") 64 | Rel_D(token, inventory, "Create and manage Token used to authenticate against systems") 65 | Rel_D(network_controller, inventory, "Create and manage Network configuration") 66 | 67 | Rel_D(network_function_controllers, supported_nfs, "Manage Network Functions Lifecycle") 68 | 69 | Rel_D(supported_nfs, clouds, "Execute on cloud infrastructure") 70 | Rel_D(bootstrap_package, clouds, "Deploy initial kpt packages upon K8s Cluster creation") 71 | Rel_D(cluster_controller, clouds, "Create and Manage K8s Clusters") 72 | Rel_D(network_controller, network_fabric, "Provision the Network Fabric using OpenConfig") 73 | 74 | @enduml -------------------------------------------------------------------------------- /diagrams/src/level3-nephio-porch-component.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml 3 | !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml 4 | 5 | Person_Ext(admin, "Network administrator", "Administrator of networks, cloud infrastructure or both") 6 | System_Ext(ext_auto, "External Automation Systems", "Software systems responsible for automatically provisioning and managing networks, cloud infrastructure, or both") 7 | 8 | System_Boundary(nephio, "Nephio") { 9 | System_Boundary(porch, "Porch") { 10 | Component(packagevariant_controller, "PackageVariant Controller", "controller", "Controller responsible for reconciling package variants with what is in git") 11 | Component(packagevariantset_controller, "PackageVariantSet Controller", "controller", "Controller responsible for reconciling package variants with what is in git") 12 | } 13 | 14 | System_Boundary(k8s_api, "Kubernetes API Server") { 15 | Component(packagevariant_crds, "PackageVariant CRD", "Custom Resource Definition", "Custom resource representing package variants managed by Porch") 16 | Component(packagevariantset_crds, "PackageVariantSet CRD", "Custom Resource Definition", "Custom resource representing package variant sets managed by Porch") 17 | } 18 | ContainerDb_Ext(gitrepo, "Git Repository Manager", "git", "System for hosting git repositories and supporting remote branch management and merging") 19 | } 20 | 21 | ' Relationships with external users 22 | Rel_D(admin, packagevariant_crds, "Manage package variants") 23 | Rel_D(admin, packagevariantset_crds, "Manage package variant sets") 24 | Rel_D(ext_auto, packagevariant_crds, "Manage package variants") 25 | Rel_D(ext_auto, packagevariantset_crds, "Manage package variant sets") 26 | 27 | ' Relationships between operators and CRDs 28 | Rel_U(packagevariant_controller, packagevariant_crds, "Reconcile PackageVariants") 29 | Rel_U(packagevariantset_controller, packagevariantset_crds, "Reconcile PackageVariantSets") 30 | 31 | ' Porch relationships 32 | Rel_U(packagevariant_controller, gitrepo, "Reconcile Package Variants") 33 | Rel_U(packagevariantset_controller, gitrepo, "Reconcile Package Variant Sets") 34 | 35 | @enduml -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/nephio-project/docs 2 | 3 | go 1.18 4 | 5 | require ( 6 | github.com/google/docsy v0.10.0 // indirect 7 | github.com/google/docsy/dependencies v0.7.2 // indirect 8 | ) 9 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= 2 | github.com/FortAwesome/Font-Awesome v0.0.0-20240402185447-c0f460dca7f7/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo= 3 | github.com/google/docsy v0.7.1 h1:DUriA7Nr3lJjNi9Ulev1SfiG1sUYmvyDeU4nTp7uDxY= 4 | github.com/google/docsy v0.7.1/go.mod h1:JCmE+c+izhE0Rvzv3y+AzHhz1KdwlA9Oj5YBMklJcfc= 5 | github.com/google/docsy v0.10.0 h1:6tMDacPwAyRWNCfvsn/9qGOZDQ8b0aRzjRZvnZPY5dg= 6 | github.com/google/docsy v0.10.0/go.mod h1:c0nIAqmRTOuJ01F85U/wJPQtc3Zj9N58Kea9bOT2AJc= 7 | github.com/google/docsy/dependencies v0.7.1/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4= 8 | github.com/google/docsy/dependencies v0.7.2 h1:+t5ufoADQAj4XneFphz4A+UU0ICAxmNaRHVWtMYXPSI= 9 | github.com/google/docsy/dependencies v0.7.2/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4= 10 | github.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= 11 | github.com/twbs/bootstrap v5.3.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0= 12 | -------------------------------------------------------------------------------- /layouts/_default/_markup/render-heading.html: -------------------------------------------------------------------------------- 1 | {{ template "_default/_markup/td-render-heading.html" . }} -------------------------------------------------------------------------------- /layouts/_default/_markup/render-image.html: -------------------------------------------------------------------------------- 1 | {{- $img := .Page.Resources.GetMatch .Destination -}} 2 | {{- if and (not $img) .Page.File -}} 3 | {{ $path := path.Join .Page.File.Dir .Destination }} 4 | {{- $img = resources.Get $path -}} 5 | {{- end -}} 6 | {{- with $img -}} 7 | {{- $large := $img.Resize "1200x" -}} 8 | {{ $medium := $large.Fill "726x402" -}} 9 | {{ $small := $medium.Fill "458x254" -}} 10 |
11 | {{ $.Text }} 15 | 16 |
{{ with $.Title | safeHTML }}{{ . }}{{ end }}
17 |
18 | {{- else -}} 19 | {{ $.Text }}{{- end -}} -------------------------------------------------------------------------------- /layouts/_default/_markup/render-link.html: -------------------------------------------------------------------------------- 1 | {{ $link := .Destination }} 2 | {{ $isRemote := strings.HasPrefix $link "http" }} 3 | {{- if not $isRemote -}} 4 | {{ $url := urls.Parse .Destination }} 5 | {{- if $url.Path -}} 6 | {{ $fragment := "" }} 7 | {{- with $url.Fragment }}{{ $fragment = printf "#%s" . }}{{ end -}} 8 | {{- with .Page.GetPage $url.Path }}{{ $link = printf "%s%s" .RelPermalink $fragment }}{{ else }}{{ warnf "%q not found from %q" $url.Path $.Page.Path }}{{ end }}{{ end -}} 9 | {{- end -}} 10 | {{ .Text | safeHTML }} -------------------------------------------------------------------------------- /layouts/partials/footer.html: -------------------------------------------------------------------------------- 1 | {{ $links := .Site.Params.links }} 2 |
3 |
4 |
5 |
6 | {{ with $links }} 7 | {{ with index . "user"}} 8 | {{ template "footer-links-block" . }} 9 | {{ end }} 10 | {{ end }} 11 |
12 |
13 | {{ with $links }} 14 | {{ with index . "developer"}} 15 | {{ template "footer-links-block" . }} 16 | {{ end }} 17 | {{ end }} 18 |
19 |
20 |
21 |

22 | © {{ now.Year }} {{ .Site.Params.copyright }} 23 |

24 |

25 | Nephio follows The Linux Foundation's Code of Conduct. 26 |

27 |

28 | Nephio documentation is built with the Docsy Hugo theme and deployed to Netlify. 29 |
30 | Deploys by Netlify 31 |

32 | {{ if not .Site.Params.ui.footer_about_disable }} 33 | {{ with .Site.GetPage "about" }}

{{ .Title }}

{{ end }} 34 | {{ end }} 35 |
36 |
37 |
38 |
39 |
40 | {{ define "footer-links-block" }} 41 |
    42 | {{ range . }} 43 |
  • 44 | 45 | 46 | 47 |
  • 48 | {{ end }} 49 |
50 | {{ end }} 51 | -------------------------------------------------------------------------------- /learning.md: -------------------------------------------------------------------------------- 1 | # Nephio Learning Resources 2 | 3 | ## Learning Go 4 | * [The Go Documentation](https://go.dev/): The Go documentation on the Go home page. 5 | * [Golang Tutorial for Beginners](https://www.youtube.com/watch?v=yyUHQIec83I): Techworld with Nana: Online Golang course on YouTube, goes through the basic/intermediate concepts in go. Well paced and structured course. Does not cover testing 6 | * [Learn Go with Tests](https://quii.gitbook.io/learn-go-with-tests/): Web resource for learning Go taking a test-first approach. As well as learning Go, it's good for learning how unit testing and benchmarking works in Go. Structured to allow the reader to focus on aspects of Go that are of interest to the reader without having to cover the entire course. 7 | * [The Go Programming Language](https://www.gopl.io/): The blue book by Donovan and Kernighan (yes that Kernighan!) 8 | 9 | ## Kubernetes 10 | 11 | * [The Kubernetes Documentation](https://kubernetes.io/): The Kubernetes documentation is well laid out, comprehensive and very readable. It is the definitive source for information on Kubernetes. 12 | * [Kubebuilder: Learning the Fundamental Kubernetes Concepts](https://kubebuilder.io/): Users of Kubernetes will develop a deeper understanding of Kubernetes through learning the fundamental concepts behind how APIs are designed and implemented. This book will teach readers how to develop their own Kubernetes APIs and the principles from which the core Kubernetes APIs are designed. 13 | * [Kubernetes Developer Guides](https://github.com/kubernetes/community/tree/master/contributors/devel#the-process-of-developing-and-contributing-code-to-the-kubernetes-project): The process of developing and contributing code to the Kubernetes project. 14 | 15 | ## Kubernetes Operators 16 | 17 | * [Build a Kubernetes Operator in Six Steps](https://developers.redhat.com/articles/2021/09/07/build-kubernetes-operator-six-steps): Howto article from Red Hat 18 | * [How to Build a Kubernetes Operator](https://www.techtarget.com/searchitoperations/tutorial/How-to-build-a-Kubernetes-operator): Howto article from TechTarget 19 | * [Kopf: Kubernetes Operators Framework](https://kopf.readthedocs.io/en/stable/): A framework for writing Kubernetes Operators in python 20 | 21 | ## KPT 22 | 23 | * [The kpt Book](https://kpt.dev/book/): A short online book that covers kpt. Well laid out and easy to read in a few hours. The examples work well and can be executed in parallel with reading the book. 24 | * [The Porch User Guide](https://kpt.dev/guides/porch-user-guide): A User Guide focused on using Porch via the kpt CLI. 25 | 26 | ## 5G Core 27 | 28 | * [OpenAirInterface 5G Core Network Deployment using Helm Charts](https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-fed/-/blob/master/docs/DEPLOY_SA5G_HC.md): OAI 5G core network have different network functions which can be used individually or deployed all together in different combination on a production grade Kubernetes cluster like Openshift or a vanilla kubernetes cluster. 29 | * [https://github.com/Orange-OpenSource/towards5gs-helm](https://github.com/Orange-OpenSource/towards5gs-helm): Reference helm charts from Orange for the Free5gc core network NFs and for the UERANSIM Radio Access Network 30 | * [https://github.com/matysiaq/kpt-packages-catalog](https://github.com/matysiaq/kpt-packages-catalog): Custom kpt packages for free5gc and UERANSIM from Orange 31 | * [https://github.com/matysiaq/nephio-pocs/tree/main/free5gc-operator](https://github.com/matysiaq/nephio-pocs/tree/main/free5gc-operator): An improved free5gc operator from Orange 32 | 33 | ## Other Useful Resources 34 | * [Using the Metallb LoadBalancer in KinD](https://kind.sigs.k8s.io/docs/user/loadbalancer/): Short but excellent guide to setting up the Metallb load balancer in *kind* 35 | * [Kubernetes Echo Server](https://ealenn.github.io/Echo-Server/pages/quick-start/kubernetes.html): Small HTTP server that echos responses, useful for debugging networking and connectivity, available on amd64 and arm64 architectures 36 | 37 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | # Hugo build configuration for Netlify 2 | # (https://gohugo.io/hosting-and-deployment/hosting-on-netlify/#configure-hugo-version-in-netlify) 3 | 4 | [build] 5 | command = "hugo" 6 | publish = "public" 7 | 8 | [build.environment] 9 | GO_VERSION = "1.18.1" 10 | HUGO_VERSION = "v0.120.4" 11 | HUGO_ENV = "production" 12 | 13 | [context.production] 14 | command = "hugo" 15 | publish = "public" -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nephio-rpoject-docs", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "postcss.config.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/nephio-project/docs.git" 12 | }, 13 | "keywords": [], 14 | "author": "Gergely Csatari ", 15 | "license": "APACHE2", 16 | "bugs": { 17 | "url": "https://github.com/nephio-project/docs/issues" 18 | }, 19 | "homepage": "https://github.com/nephio-project/docs#readme", 20 | "devDependencies": { 21 | "autoprefixer": "^10.4.16", 22 | "postcss": "^8.4.31", 23 | "postcss-cli": "^10.1.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('autoprefixer') 4 | ] 5 | }; 6 | 7 | -------------------------------------------------------------------------------- /resources.md: -------------------------------------------------------------------------------- 1 | # Additional Resources 2 | This repository contains user-oriented documentation and tutorials. For 3 | developer documentation, see the 4 | [nephio](https://github.com/nephio-project/nephio) repository. 5 | 6 | ## Basic Resources 7 | * [Nephio Site](https://nephio.org) 8 | * [Nephio Wiki](https://wiki.nephio.org) 9 | * [Slack Workspace](https://nephio.slack.com) 10 | 11 | ## Blog Posts 12 | * [Linux Foundation Press Release](https://www.linuxfoundation.org/press/press-release/the-linux-foundation-and-google-cloud-launch-nephio-to-enable-and-simplify-cloud-native-automation-of-telecom-network-functions) 13 | * [Google Cloud Blog Post Announcement](https://cloud.google.com/blog/topics/telecommunications/automating-cloud-native-telecommunication-networks) 14 | * [Achieving Cloud-Native Network Automation At A Global Scale With Nephio](https://cloud.google.com/blog/topics/telecommunications/network-automation-csps-linus-nephio-cloud-native) outlines three basic principles Nephio follows: 15 | * **Intent-driven**: Nephio uses Kubernetes Resource Model (KRM) for intent 16 | * **Distributed actuation**: Nephio uses gitops and independent Kubernetes clusters at the edge 17 | * **Uniformity in systems**: Nephio uses Kubernetes-based management for 18 | infrastructure, functions, and function configuration ("Kubernetes Everywhere") 19 | * [On The Road To Public Cloud 5G Networks](https://nephio.org/on-the-road-to-public-cloud-5g-networks/) provides context and challenges for CSPs, function vendors, and cloud providers in bringing 5G networks to public cloud. 20 | * [Join Us In Evolving The Usability Of GitOps](https://cloud.google.com/blog/products/containers-kubernetes/lets-improve-gitops-usability) discusses some of the underlying configuration management techniques and technologies in Nephio. 21 | 22 | ## Tutorials and Workshops 23 | 24 | More tutorials are under discussion in 25 | [docs#1](https://github.com/nephio-project/docs/issues/1). 26 | 27 | * [ONE Summit 2022 28 | Workshop](https://github.com/nephio-project/one-summit-22-workshop#one-summit-2022-nephio-workshop) 29 | 30 | 31 | ## Conference Talks 32 | * October 2021: ONE Summit 2021 Panel discussing the underlying problems Nephio is working to solve ([sched](https://sched.co/lSv3), [video](https://youtu.be/swuUElcR3x0)). 33 | * October 2021: ONE Summit 2021 talk *Living the Dream: Achieving Cloud Native Network Function Deployment at the Edge*, introducing the ideas behind Nephio ([sched](https://sched.co/lSux), [video](https://youtu.be/aZT17TU_M14)). 34 | * June 2022: Nephio First Developer Summit [playlist](https://www.youtube.com/playlist?list=PLiW9_IXAWtkurqeM-ZKIGXIORcYjsESac), but this is a very long video. Two parts that may be of particular interest from a technology background perspective: 35 | * [How Config as Data Enables Automation](https://youtu.be/UHr3fBNr8BI?t=11185) 36 | * [Nephio Reference Implementation](https://youtu.be/UHr3fBNr8BI?t=20664) 37 | * October 2022: KubeCon North America 2022 Detroit talk *Orchestrating Interconnected Apps Across Geographically Distributed Kubernetes Clusters* ([sched](https://sched.co/182H0), [video](https://youtu.be/ya1fUqAgvN8)). 38 | * November 2022: ONE Summit 2022 Nephio [playlist](https://www.youtube.com/playlist?list=PLiW9_IXAWtkuZDHYalEEjl0LdATSzf8Qd) 39 | * February 2023: Linux Foundation Networking - Developer and Testing Forum [Nephio Topics](https://wiki.lfnetworking.org/display/LN/2023-02+LFN+Developer+Event+Topics+February+13+-+16#id-202302LFNDeveloperEventTopicsFebruary1316-NephioTopics) 40 | * April 2023: KubeCon Europe 2023 Amsterdam talk *Collaboratively Building App Manifests at Scale in Complex Organizations* ([sched](https://sched.co/1HydY), [video](https://youtu.be/Ms9gSuC8I6E)). 41 | 42 | ## Meetings 43 | * [TSC Meeting Playlist](https://www.youtube.com/playlist?list=PLiW9_IXAWtks6qhQyXAulDsJQI3W-GIXm) 44 | * [SIG Net Arch Meeting Playlist](https://www.youtube.com/playlist?list=PLiW9_IXAWtkvR-96MSlb6esigohA7zX9W) 45 | * [SIG Automation Meeting Playlist](https://www.youtube.com/playlist?list=PLiW9_IXAWtkv-2lONtj0pq2hyRuO8REcb) 46 | * [SIG Release Meeting playlist](https://www.youtube.com/playlist?list=PLiW9_IXAWtks9Ys4Zs6wPRNEuQYAnWcg1) 47 | 48 | ## Other Resources 49 | * The [Glossary & Abbreviations](content/en/docs/glossary-abbreviations.md) defines common terminology used in the Nephio 50 | project. 51 | * The [Nephio Learning Resources page](learning.md) lists some learning resources that are useful for the Nephio community 52 | -------------------------------------------------------------------------------- /static/images/architecture/level1-nephio-system.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/architecture/level1-nephio-system.png -------------------------------------------------------------------------------- /static/images/architecture/level2-nephio-container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/architecture/level2-nephio-container.png -------------------------------------------------------------------------------- /static/images/architecture/level3-nephio-core-component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/architecture/level3-nephio-core-component.png -------------------------------------------------------------------------------- /static/images/architecture/nephio-porch-component-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/architecture/nephio-porch-component-view.png -------------------------------------------------------------------------------- /static/images/install-guides/ManagementCluster.drawio: -------------------------------------------------------------------------------- 1 | 7Vtdc6M2FP01nmkfktEHAvHoOLtp2mTHM2k36SMG2dYYIxfk2O6vrwBhAyJdr2MWh1nnAXT1AZxzdHUvIgM8Wm7vYm81fxQBCwcIBNsBvh0gBIlF1SG17LQFQDu3zGIeaNvB8MT/ZUVDbV3zgCWVhlKIUPJV1eiLKGK+rNi8OBabarOpCKtXXXkzZhiefC80rc88kPPcijC2DxW/MT6bF5e2iZXXLL2itX6UZO4FYlMy4U8DPIqFkPnZcjtiYQpfAUze7/Mbtfs7i1kkj+mAkuH9/A48v9An+fuSgo2M0JUe5dUL1/qJB8gO1Xg3U6GGVXctdxoL+5+1KCqukoypoWqA4ErRfXOoV2ez9Pj1sRhK3VM+Wl6h4dgPjGKxjgKW3iZQ1Zs5l+xp5flp7UbpStnmchmqElSnryyWXBE0DPksUjYp0gZTHoYjEYo4GxEHHqNTX9kTGYsFK9XYPmWT6f4uyvAVWKgLsG3JpOG8Y2LJZLxTTXSthTW1Wt12Ud4cpAKRrY3zkkxIoW9P63O2H/zAoDrRJH4Hocgg9Fb4Cxa/D/SUPj050dEkTKdT5DeSENgTm9jnIcGxaiRQkwQXN3BgWW1xgA0OHr1IOYoly6bUKFwnMmUE/LLgUfBrF9RQnzVTM6HEIuA81FBQpcZpmB+UNFCDnbaoKeZdiZsbL2HZCrJciUg9bJKOESXSC0PFAQLrhEczdfxj/GcGiL9QVCZdkEbSP927ZM9/jc4u+52JzJqzc5vIBA1kQtIWmZY5z5iiTZke3rnI1PmpLy+E0cBqQpyiCT4b4jXP5jpNy0sD4nZbgBMD8JF6GmXJ/duZF5lOQHcdcmGg2wbodwpGrwMH9GMYgBDQ0yiAoC0OHFP4+0V8NBzf90D4EF2cu6ENa7WKZaPg6n48fOwD5vtA52Iwd9/E/OvD8EsfMCfg0jCHZhb+tGI+n3L/Z2D67RWb1LKMhgSQWE3LBW6NUDMLH4vYn/dg+rg2qqBNkXPc7HFwW2Cb6fZIRFM+S3aR3wPEIXCtS4PczLy+sNWcizQcUpjFQrmo+MyuqKOoCNmXBr6Zhe3Bf2aTv3oRjGJCLwz24mIl2IMW3qx2ArdVC0NteiTalt0W2mZIlL4r7SHWDnG7xtqMVhbrCfNl2EO4KeocbjNeWaxkH6F2O/ciZpziR7yHULt251CbUYmBM4uCYbonr0p+6CUJz3egvFia5hLiVXrq+LMtly+6ZXr+d9rumujS7VZ3ywq7oqBC1N1LuZD3ggAVhkPHrFT0zO72M0+x0bVBtaRvDZKicdmQjTVmMVeYs1h3elMOiVjHPjsiJFGXmTH5fw3zdiyofOxgqqucMTftWmtbzEJP8ldWudsmRekrjAXPNj6LFBLVxFt/bZs/uO510KU5UN3h1HeacmCMgTKB7x/7HZo3X813qXl0ouiR9aFEX3wG9C3R44sSvUVrYZ8Dr8lpsnfcmuzr86dt2Zu7IR/A1V+BawBgVfr4Qwkf9UL41MKnCp/C2lAY1YdqW/rmltQHkH7N4X8sd4+PVH2hjQuVvYvOJHpjoJYlj803MWORyFncyVbTjTNybuzWXz9C6FRAh6DYZSgnWACZ8mnvo0LztcFMrki6AfjAo/VWHR9FsFZUtJneMqgSXKcJf5WCYu9c6W3tWzMIGvb0IG2Yva3t0eLO8ts3vLhD2nXjp6QYP8LNw4ty88Ste+cTc9n6x34QnC2qV8XDfxnkzQ//rYE//Qc= -------------------------------------------------------------------------------- /static/images/install-guides/ManagementCluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/install-guides/ManagementCluster.png -------------------------------------------------------------------------------- /static/images/install-guides/SandboxRepos.drawio: -------------------------------------------------------------------------------- 1 | 7Vhdc9soFP01nuk+NCOBvvyYOB/NzGabaR6afcQSlphg4SIc2/31e5FAloSycVMn6XT6ZLjABc45l3vlCZ4tt1eSrIobkVE+QV62neDzCUJ+gGL40ZadsXh+1FhyyTJj2xvu2HdqJxrrmmW06k1UQnDFVn1jKsqSpqpnI1KKTX/aQvD+riuSU8dwlxLuWr+yTBWNFWEc7Qc+UZYXdusoDJqRJbGzzVWqgmRi0zHhiwmeSSFU01puZ5Rr+CwwzbrLJ0bbk0laqkMW3J/xXXBxfbt4vKTy4vrKjxT6iBsvj4SvzY1vSAl3WmqnyJvxdaWohNaHB1Zmf5mbqJ3FR4p1mVG9gzfBZ5uCKXq3Iqke3YAkwFaoJYeeD82FKJWhGOn+I5WKAdannOUlGJXQCxaM85ngQtY74EWS0jQFe6WkeKCdkXkSBqHe1twBvNHtk+D4LeSgViqWVMkdTDELIis4K9TQ9Dd71uOpsRUdwrGllxil5a3vPRfQMHT8ADWxQ80VoEvegYIspEkWjFGQoDmOouNQMA37FCDPpaB9F7oUoPC1KPCRw8GtkGlxXA7eBe1WzBbtOHbQ9tEI2jF+LbDdt2gmygXLq12Z/gaI+yjqQ45jV+BvDHngQP4PXRVM6KcfMJOCcyqr3wD8CA/kjt4bezR1sJ+giCuDWA/w6Nta2IGPVY3lKUzww9W2hseOQys3v7WjuTXc5Evt8U6RnJU5tL7QlWhnyeE6uFC79LpkihF9nTmUKkAS8Iu8r0I+cEGyXo2Q1uG6lkQxUf6v9+aG1jxQFxRKK91MdxxqDirx8xqbN4L8e94aSPqQ1zL9vFbghhp7A955PKJDQpPFaJ0RpQmdL46U5OKBDoMRHcYjOpy+Vo6zgfGWOuyqr6s1VzPnu5IsWfpHcUdTHB6pbEcVl7ya4tyqymGEltmp/nzTpHBSVazBiUjlmjus9BNTJ/P4IfTplql7M1O3/9XzTuzI+dYsqzs724EsuLvvdppVKLT9/bq6ZxfWh71k3B4NbmTP0g4bw7QZ7kxu8KCZ83E6YB0wE2uZ0gNyPOyXU/VssevqqKOTcEQm1iYphyh87B94TDtmh1vB6telrY6G5f9Qf81NzbLud+7QE/YGnvDAUwOF46kWc3vxn9C3W8h+0amzLmOHT9QZPDh1Sn46AAQ4Gqrf2H5Y+t5LpO/3pf9y5ScD4SeO8GtPt1QyIIFK45CTOeVn7ftqH8pS6Ef2qLGCD4wV7E3eMVbiaChw9LJQSfxhzEUncfi2weJ+gvy6yeCn3vSnMkkQBs8E1GhQHFP26EDZx7+U6qPoZKDVg3U/yBDYC3VCP47uobv/U7eZvv9zHF/8Bw== -------------------------------------------------------------------------------- /static/images/install-guides/gcp-console-packages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/install-guides/gcp-console-packages.png -------------------------------------------------------------------------------- /static/images/install-guides/install-guide-gcp-nephio-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/install-guides/install-guide-gcp-nephio-login.png -------------------------------------------------------------------------------- /static/images/network-architecture/o-ran/deployment-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/network-architecture/o-ran/deployment-architecture.png -------------------------------------------------------------------------------- /static/images/network-architecture/o-ran/focom-ims.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/network-architecture/o-ran/focom-ims.png -------------------------------------------------------------------------------- /static/images/network-architecture/o-ran/focom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/network-architecture/o-ran/focom.png -------------------------------------------------------------------------------- /static/images/network-architecture/o-ran/focom1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/network-architecture/o-ran/focom1.png -------------------------------------------------------------------------------- /static/images/network-architecture/o-ran/focom2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/network-architecture/o-ran/focom2.png -------------------------------------------------------------------------------- /static/images/network-architecture/o-ran/ims-provisioning-create-cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/network-architecture/o-ran/ims-provisioning-create-cluster.png -------------------------------------------------------------------------------- /static/images/network-architecture/o-ran/nf-orch-smo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/network-architecture/o-ran/nf-orch-smo.png -------------------------------------------------------------------------------- /static/images/not-brave-enough-to-delete/nephio-R1-demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/not-brave-enough-to-delete/nephio-R1-demo.png -------------------------------------------------------------------------------- /static/images/porch/contributor/01_VSCodeOpenPorchFolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/contributor/01_VSCodeOpenPorchFolder.png -------------------------------------------------------------------------------- /static/images/porch/contributor/02_VSCodeConnectedPorch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/contributor/02_VSCodeConnectedPorch.png -------------------------------------------------------------------------------- /static/images/porch/contributor/03_LaunchOverrideServer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/contributor/03_LaunchOverrideServer.png -------------------------------------------------------------------------------- /static/images/porch/contributor/04_GoDebugNotSupportedPopup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/contributor/04_GoDebugNotSupportedPopup.png -------------------------------------------------------------------------------- /static/images/porch/contributor/05_GoExtensionAutoSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/contributor/05_GoExtensionAutoSelected.png -------------------------------------------------------------------------------- /static/images/porch/contributor/06_GoExtensionInstalled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/contributor/06_GoExtensionInstalled.png -------------------------------------------------------------------------------- /static/images/porch/packagevariant-clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariant-clone.png -------------------------------------------------------------------------------- /static/images/porch/packagevariant-config-injection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariant-config-injection.png -------------------------------------------------------------------------------- /static/images/porch/packagevariant-context.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariant-context.png -------------------------------------------------------------------------------- /static/images/porch/packagevariant-function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariant-function.png -------------------------------------------------------------------------------- /static/images/porch/packagevariant-legend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariant-legend.png -------------------------------------------------------------------------------- /static/images/porch/packagevariantset-target-list-with-packages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariantset-target-list-with-packages.png -------------------------------------------------------------------------------- /static/images/porch/packagevariantset-target-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariantset-target-list.png -------------------------------------------------------------------------------- /static/images/porch/packagevariantset-target-repo-selector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/porch/packagevariantset-target-repo-selector.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-10.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-11.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-12.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-2.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-3.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-4.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-5.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-6.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-7.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-8.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity-9.png -------------------------------------------------------------------------------- /static/images/user-guides/UPF-Capacity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/UPF-Capacity.png -------------------------------------------------------------------------------- /static/images/user-guides/add-deploy-onlinebout-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/add-deploy-onlinebout-select.png -------------------------------------------------------------------------------- /static/images/user-guides/add-deployment-selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/add-deployment-selection.png -------------------------------------------------------------------------------- /static/images/user-guides/approve-selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/approve-selection.png -------------------------------------------------------------------------------- /static/images/user-guides/external-bp-repos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/external-bp-repos.png -------------------------------------------------------------------------------- /static/images/user-guides/flux-controller-selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/flux-controller-selection.png -------------------------------------------------------------------------------- /static/images/user-guides/free5gc-cp-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/free5gc-cp-1.png -------------------------------------------------------------------------------- /static/images/user-guides/free5gc-cp-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/free5gc-cp-2.png -------------------------------------------------------------------------------- /static/images/user-guides/free5gc-cp-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/free5gc-cp-3.png -------------------------------------------------------------------------------- /static/images/user-guides/free5gc-cp-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/free5gc-cp-4.png -------------------------------------------------------------------------------- /static/images/user-guides/free5gc-cp-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/free5gc-cp-5.png -------------------------------------------------------------------------------- /static/images/user-guides/free5gc-cp-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/free5gc-cp-6.png -------------------------------------------------------------------------------- /static/images/user-guides/gitea-porch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/gitea-porch.png -------------------------------------------------------------------------------- /static/images/user-guides/helm-to-operator-codegen-sdk-flow-diagram.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/helm-to-operator-codegen-sdk-flow-diagram.jpg -------------------------------------------------------------------------------- /static/images/user-guides/helmrepo-onlineboutique-ref.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/helmrepo-onlineboutique-ref.png -------------------------------------------------------------------------------- /static/images/user-guides/nephio-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/nephio-deployment.png -------------------------------------------------------------------------------- /static/images/user-guides/nephio-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/nephio-overview.png -------------------------------------------------------------------------------- /static/images/user-guides/nephio-pkgs-onlineboutique-show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/nephio-pkgs-onlineboutique-show.png -------------------------------------------------------------------------------- /static/images/user-guides/nephio-r1-5g-network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/nephio-r1-5g-network.png -------------------------------------------------------------------------------- /static/images/user-guides/nephio-r2-5g-network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/nephio-r2-5g-network.png -------------------------------------------------------------------------------- /static/images/user-guides/nephio-r2-deployment-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/nephio-r2-deployment-diagram.png -------------------------------------------------------------------------------- /static/images/user-guides/nephio-ui-edge02-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/nephio-ui-edge02-deployment.png -------------------------------------------------------------------------------- /static/images/user-guides/package-ancestry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/package-ancestry.png -------------------------------------------------------------------------------- /static/images/user-guides/package-lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/package-lifecycle.png -------------------------------------------------------------------------------- /static/images/user-guides/propose-selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/propose-selection.png -------------------------------------------------------------------------------- /static/images/user-guides/select-create-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nephio-project/docs/82de306641e05837e2cd1b683572be9e4b6d15be/static/images/user-guides/select-create-deployment.png -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | minversion = 1.6 3 | skipsdist = True 4 | envlist = spell 5 | 6 | [testenv] 7 | passenv = http_proxy,HTTP_PROXY,https_proxy,HTTPS_PROXY,no_proxy,NO_PROXY 8 | usedevelop = False 9 | install_command = pip install {opts} {packages} 10 | 11 | [testenv:spell] 12 | deps = 13 | pyspelling 14 | commands = pyspelling -c .spellcheck.yml 15 | --------------------------------------------------------------------------------