From 6d90576f0b7e3962c872a0117536616385645ff2 Mon Sep 17 00:00:00 2001 From: Denis Tingaikin Date: Tue, 26 Sep 2023 02:28:12 +0300 Subject: [PATCH 1/5] add generator for nsm site notes & generate notes Signed-off-by: Denis Tingaikin --- .github/sync/Makefile | 3 + .github/sync/githubv4.go | 246 ++++++++++++++++++++++++++ .github/sync/go.mod | 5 + .github/sync/go.sum | 2 + .github/sync/main.go | 187 ++++++++++++++++++++ .github/workflows/ci.yaml | 8 + .github/workflows/pr-for-updates.yaml | 11 ++ .github/workflows/sync.yaml | 35 ++++ .hugo_build.lock | 0 Makefile | 7 + content/docs/releases/v1.10.0.md | 177 ++++++++++++------ content/docs/releases/v1.11.0.md | 108 +++++++++++ content/docs/roadmap/_index.md | 4 - content/docs/roadmap/v1.3.0.md | 39 ---- content/docs/roadmap/v1.4.0.md | 86 --------- content/docs/roadmap/v1.5.0.md | 90 ---------- content/docs/roadmap/v1.6.0.md | 89 ---------- content/docs/roadmap/v1.7.0.md | 61 ------- content/docs/roadmap/v1.8.0.md | 68 ------- layouts/partials/docs/hero.html | 3 + 20 files changed, 742 insertions(+), 487 deletions(-) create mode 100644 .github/sync/Makefile create mode 100644 .github/sync/githubv4.go create mode 100644 .github/sync/go.mod create mode 100644 .github/sync/go.sum create mode 100644 .github/sync/main.go create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/pr-for-updates.yaml create mode 100644 .github/workflows/sync.yaml create mode 100644 .hugo_build.lock create mode 100755 content/docs/releases/v1.11.0.md delete mode 100644 content/docs/roadmap/_index.md delete mode 100644 content/docs/roadmap/v1.3.0.md delete mode 100644 content/docs/roadmap/v1.4.0.md delete mode 100644 content/docs/roadmap/v1.5.0.md delete mode 100644 content/docs/roadmap/v1.6.0.md delete mode 100644 content/docs/roadmap/v1.7.0.md delete mode 100644 content/docs/roadmap/v1.8.0.md diff --git a/.github/sync/Makefile b/.github/sync/Makefile new file mode 100644 index 00000000..9dbc4c77 --- /dev/null +++ b/.github/sync/Makefile @@ -0,0 +1,3 @@ +fetch-notes-build: + @GOPATH=$(GOPATH) GOBIN=$(GOBIN) go build -o fetchnotes main.go githubv4.go + mv fetchnotes ../../bin/fetchnotes \ No newline at end of file diff --git a/.github/sync/githubv4.go b/.github/sync/githubv4.go new file mode 100644 index 00000000..ed083a30 --- /dev/null +++ b/.github/sync/githubv4.go @@ -0,0 +1,246 @@ +package main + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io/ioutil" + "log" + "net/http" + "os" + "regexp" + "strings" + "time" +) + +func listIssuesProjectV2Query(nodeId string) string { + return fmt.Sprintf("query { node(id: \"%v\") { ... on ProjectV2 { items(last: 100) { nodes { id content { ... on Issue { title url state body } } fieldValues(first: 20) { nodes { ... on ProjectV2ItemFieldSingleSelectValue { field { ... on ProjectV2SingleSelectField { name } } name id } ... on ProjectV2ItemFieldRepositoryValue { repository { id url } } } } } } } } }", nodeId) +} + +func listProjectsV2Query(org string) string { + return fmt.Sprintf("{organization(login: \"%v\") {projectsV2(first: 100) {nodes {id title readme url }}}}", org) +} + +type Field struct { + Name string + Value string +} +type Issue struct { + Name string + Status string + Description string + Url string + Fields []*Field +} + +func (i *Issue) Resolved() bool { + switch strings.ToLower(i.Status) { + case "done", "closed": + return true + default: + return false + } +} + +type ProjectV2 struct { + Id string + Readme string + Name string + Tag string + Url string + ReleaseDate time.Time + IsReleased bool +} + +func (p *ProjectV2) parseReleaseDate() time.Time { + var arr = strings.FieldsFunc(p.Readme, func(r rune) bool { return r == '\n' || r == '\\' }) + for _, line := range arr { + line = strings.TrimSpace(line) + if strings.HasPrefix(line, "Release: ") { + var result, _ = time.Parse(time.DateOnly, line[len("Release: "):]) + return result + } + } + return time.Time{} +} + +func (p *ProjectV2) parseReadme() { + var lines = strings.Split(p.Readme, "\n") + p.Readme = strings.Join(lines, " \\\n") +} + +func (p *ProjectV2) IsDraft() bool { + return p.ReleaseDate.After(time.Now()) +} + +var versionPattern = regexp.MustCompile(`v(\d+\.)?(\d+\.)?(\*|\d+)$`) + +func FeildsFromJson(rawData map[string]any) *Field { + var field = new(Field) + + for k, v := range rawData { + switch k { + case "field": + field.Name = v.(map[string]any)["name"].(string) + case "name": + field.Value = v.(string) + } + } + + if field.Name != "" && field.Value != "" { + return field + } + + return nil +} + +func IssueFromJson(rawData map[string]any) *Issue { + var issue = new(Issue) + + if content, ok := rawData["content"]; ok { + for k, v := range content.(map[string]any) { + switch k { + case "body": + issue.Description = v.(string) + case "title": + issue.Name = v.(string) + case "state": + issue.Status = v.(string) + case "url": + issue.Url = v.(string) + + } + } + } + if fields, ok := rawData["fieldValues"]; ok { + issue.Fields = walkTree[Field](fields.(map[string]any), FeildsFromJson) + } + + if issue.Description != "" && + issue.Status != "" && + len(issue.Fields) > 0 && + issue.Url != "" && + issue.Name != "" { + return issue + } + + return nil +} + +func ProjectV2FromJson(rawData map[string]any) *ProjectV2 { + var r = new(ProjectV2) + for k, v := range rawData { + if v == nil { + continue + } + switch k { + case "readme": + r.Readme = v.(string) + case "title": + r.Name = v.(string) + case "id": + r.Id = v.(string) + case "url": + r.Url = v.(string) + } + } + + if r.Id != "" && r.Readme != "" && r.Name != "" { + r.ReleaseDate = r.parseReleaseDate() + r.IsReleased = time.Now().After(r.ReleaseDate) + r.parseReadme() + return r + } + + return nil +} + +func GetOrFetchIssues(ctx context.Context, projectId string) ([]*Issue, error) { + var resp, err = githubGraphQLPost(ctx, listIssuesProjectV2Query(projectId)) + if err != nil { + return nil, err + } + return walkTree[Issue](resp, IssueFromJson), nil +} + +func walkTree[T any](rawData map[string]any, mapperFn func(map[string]any) *T) []*T { + var result []*T + var dfs func(obj any) + + dfs = func(v any) { + switch val := v.(type) { + case []any: + for _, item := range val { + dfs(item) + } + case map[string]any: + var mappedValue = mapperFn(val) + if mappedValue != nil { + result = append(result, mappedValue) + } else { + for _, v := range val { + if v == nil { + continue + } + dfs(v) + } + } + + } + } + dfs(rawData) + return result +} + +func getProjectsV2(ctx context.Context, org string) ([]*ProjectV2, error) { + var resp, err = githubGraphQLPost(ctx, listProjectsV2Query(org)) + if err != nil { + return nil, err + } + var result = walkTree[ProjectV2](resp, ProjectV2FromJson) + + for _, r := range result { + r.Tag = versionPattern.FindString(r.Name) + } + + return result, nil +} + +func githubGraphQLPost(ctx context.Context, query string) (map[string]any, error) { + var token = os.Getenv("GITHUB_TOKEN") + jsonQuery, err := json.Marshal(map[string]string{"query": query}) + if err != nil { + return nil, err + } + + client := &http.Client{} + req, err := http.NewRequest(http.MethodPost, "https://api.github.com/graphql", bytes.NewBuffer(jsonQuery)) + if err != nil { + log.Fatal(err) + } + + req.Header = http.Header{ + "Content-Type": {"application/json"}, + "Accept": {"application/json"}, + "Authorization": {"Bearer " + token}, + } + req = req.WithContext(ctx) + resp, err := client.Do(req) + if err != nil { + return nil, err + } + + defer func() { + _ = resp.Body.Close() + }() + + responseBody, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + var result map[string]any + + return result, json.Unmarshal(responseBody, &result) +} diff --git a/.github/sync/go.mod b/.github/sync/go.mod new file mode 100644 index 00000000..7d4f2f90 --- /dev/null +++ b/.github/sync/go.mod @@ -0,0 +1,5 @@ +module github.com/networkservicemesh/site/gen + +go 1.20 + +require github.com/kelseyhightower/envconfig v1.4.0 diff --git a/.github/sync/go.sum b/.github/sync/go.sum new file mode 100644 index 00000000..8642a1a3 --- /dev/null +++ b/.github/sync/go.sum @@ -0,0 +1,2 @@ +github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= diff --git a/.github/sync/main.go b/.github/sync/main.go new file mode 100644 index 00000000..8cbb3af7 --- /dev/null +++ b/.github/sync/main.go @@ -0,0 +1,187 @@ +package main + +import ( + "context" + "log" + "os" + "path/filepath" + "strings" + "text/template" + + "github.com/kelseyhightower/envconfig" +) + +type Config struct { + Orgianization string `default:"networkservicemesh"` + ReleasesDir string `default:"content/docs/releases"` + RoadmapDir string `default:"content/docs/roadmap"` +} + +const notesTemplate = ` ++++ +short="{{ .Tag }}" +title = "Release {{ .Tag }}" +date="{{ .ReleaseDate }}" ++++ + +{{ if not .IsReleased }} +# Schedule + +{{ .Readme }} + +{{ end }} +# {{ .Name }} + + +NSM {{ .Tag }} has been tested on: +- [kind](https://github.com/networkservicemesh/integration-k8s-kind/actions?query=branch%3Arelease%2F{{ .Tag }}+) +- [GKE](https://github.com/networkservicemesh/integration-k8s-gke/actions?query=branch%3Arelease%2F{{ .Tag }}+) +- [AKS](https://github.com/networkservicemesh/integration-k8s-aks/actions?query=branch%3Arelease%2F{{ .Tag }}+) +- [AWS/AWS IPv6](https://github.com/networkservicemesh/integration-k8s-aws/actions?query=branch%3Arelease%2F{{ .Tag }}+) +- [Bare metal in Equinix Metal](https://github.com/networkservicemesh/integration-k8s-packet/actions?query=branch%3Arelease%2F{{ .Tag }}+) +- [Interdomain GKE/AWS/AKS](https://github.com/networkservicemesh/integration-interdomain-k8s/actions?query=branch%3Arelease%2F{{ .Tag }}+) + +## Changes since last release + +{{ range .PlannedIssues }} + +### {{ .Name }} + +{{ .Description }} + +[See more details]({{ .Url }}) +{{ end }} + +## System stability fixes and improvements + +{{ range .Issues }} + +### {{ .Name }} + +{{ .Description }} + +[See more details]({{ .Url }}) +{{ end }} + + +## Release project board + +[Notes based on]({{ .Url }}) +` + +const roadMapTemplate = ` +` + +func main() { + var c = new(Config) + if err := envconfig.Usage("nsm", c); err != nil { + log.Fatal(err) + } + if err := envconfig.Process("nsm", c); err != nil { + log.Fatalf("error processing rootConf from env: %+v", err) + } + + var projects, err = getProjectsV2(context.Background(), "networkservicemesh") + if err != nil { + panic(err.Error()) + } + + for _, v := range projects { + v.Name = "NSM " + v.Name + if v.IsDraft() { + v.Name = "[DRAFT] " + v.Name + } + issues, err := GetOrFetchIssues(context.Background(), v.Id) + if err != nil { + panic(err.Error()) + } + var plannedIssues, otherIssues []*Issue + for _, issue := range issues { + var desc = issue.Description + issue.Description = parseSection("Motivation", desc) + if issue.Description == "" { + issue.Description = parseSection("Description", desc) + } + if issue.Description == "" { + issue.Description = "Status: RESOLVED." + } + var planned = false + for _, field := range issue.Fields { + if field.Value == "Roadmap" { + planned = true + break + } + } + if issue.Resolved() { + if planned { + plannedIssues = append(plannedIssues, issue) + } else { + otherIssues = append(otherIssues, issue) + } + } + } + + tmpl, err := template.New("release").Parse(notesTemplate) + if err != nil { + panic(err.Error()) + } + var sb strings.Builder + + err = tmpl.Execute(&sb, &Input{ + ProjectV2: v, + PlannedIssues: plannedIssues, + Issues: otherIssues, + }) + if err != nil { + panic(err.Error()) + } + + _ = os.WriteFile(filepath.Join(c.ReleasesDir, v.Tag+".md"), []byte(sb.String()), os.ModePerm) + } + +} + +type Input struct { + *ProjectV2 + PlannedIssues []*Issue + Issues []*Issue +} + +func parseSection(section, s string) string { + const sectionEnd = "#" + + start := strings.Index(s, section) + if start == -1 { + return "" + } + + s = s[start+len(section):] + + var end, offset int + for blockEnd := 0; ; offset += blockEnd { + if end = strings.Index(s[offset:], sectionEnd); end < 0 { + return s + } + + if blockEnd = skipBlocks(s[offset:], end); blockEnd < end { + break + } + } + return strings.TrimSpace(s[:end+offset]) +} + +func skipBlocks(s string, sectionEnd int) (end int) { + const blockDelim = "```" + + for start := strings.Index(s[end:], blockDelim); start > 0; start = strings.Index(s[end:], blockDelim) { + if start += end + len(blockDelim); start > sectionEnd { + return end + } + + if end = strings.Index(s[start:], blockDelim); end < 0 { + return len(s) + } + end += start + len(blockDelim) + } + return end +} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000..046a3151 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,8 @@ +--- +name: ci +on: + pull_request: + +jobs: + yamllint: + uses: networkservicemesh/.github/.github/workflows/yamllint.yaml@main \ No newline at end of file diff --git a/.github/workflows/pr-for-updates.yaml b/.github/workflows/pr-for-updates.yaml new file mode 100644 index 00000000..4561cf6a --- /dev/null +++ b/.github/workflows/pr-for-updates.yaml @@ -0,0 +1,11 @@ +--- +name: Pull Request on update/* Branch Push +on: + push: + branches: + - update/** +jobs: + auto-pull-request: + uses: networkservicemesh/.github/.github/workflows/pr-for-updates.yaml@main + secrets: + token: ${{ secrets.NSM_BOT_GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/sync.yaml b/.github/workflows/sync.yaml new file mode 100644 index 00000000..597a5e58 --- /dev/null +++ b/.github/workflows/sync.yaml @@ -0,0 +1,35 @@ +--- +name: Auto sync-up NSM site with project boards +on: + schedule: + - cron: '0 0 * * 0' +jobs: + build-and-commit: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Setup Go + uses: actions/setup-go@v1 + with: + go-version: 1.20.8 + - name: build & run fetchnotes + run: make fetch-notes + env: + GITHUB_TOKEN: ${{ secrets.NSM_BOT_GITHUB_TOKEN }} + - name: Create commit message + run: | + echo Sync up NSM site with project boards $(date) > /tmp/commit-message + echo "Commit Message:" + cat /tmp/commit-message + - name: Push update to the + run: | + git config --global user.email "nsmbot@networkservicmesh.io" + git config --global user.name "NSMBot" + git add public/docs/releases + if ! [ -n "$(git diff --cached --exit-code)" ]; then + echo site is up to date + exit 0; + fi + git commit -s -F /tmp/commit-message + git push -f origin update/${{ github.repository }} diff --git a/.hugo_build.lock b/.hugo_build.lock new file mode 100644 index 00000000..e69de29b diff --git a/Makefile b/Makefile index 7502a5f5..62b08c91 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,13 @@ yarn: clean: rm -rf public resources +fetch-notes-build: + $(MAKE) -C .github/sync + +fetch-notes: fetch-notes-build + @echo make sure that GITHUB_TOKEN is set + @GITHUB_TOKEN=$(GITHUB_TOKEN) bin/fetchnotes + serve: yarn hugo server \ --buildDrafts \ diff --git a/content/docs/releases/v1.10.0.md b/content/docs/releases/v1.10.0.md index 3f6c4b20..9f16af45 100755 --- a/content/docs/releases/v1.10.0.md +++ b/content/docs/releases/v1.10.0.md @@ -2,9 +2,10 @@ +++ short="v1.10.0" title = "Release v1.10.0" -weight = 1 +date="2023-07-18 00:00:00 +0000 UTC" +++ + # NSM Release v1.10.0 @@ -14,30 +15,31 @@ NSM v1.10.0 has been tested on: - [AKS](https://github.com/networkservicemesh/integration-k8s-aks/actions?query=branch%3Arelease%2Fv1.10.0+) - [AWS/AWS IPv6](https://github.com/networkservicemesh/integration-k8s-aws/actions?query=branch%3Arelease%2Fv1.10.0+) - [Bare metal in Equinix Metal](https://github.com/networkservicemesh/integration-k8s-packet/actions?query=branch%3Arelease%2Fv1.10.0+) -- [Interdomain GKE/AWS/AKS](https://github.com/networkservicemesh/integration-interdomain-k8s/actions?query=branch%3Arelease%2Fv1.10.0+)) +- [Interdomain GKE/AWS/AKS](https://github.com/networkservicemesh/integration-interdomain-k8s/actions?query=branch%3Arelease%2Fv1.10.0+) -## Schedule +## Changes since last release -Feature freeze: 4th of July \ -Release candidate: 11th of July \ -Release: 18th of July -## Changes since last release +### Simplify healing - determinate reselect state for whole chain +Status: RESOLVED. -### AWS: AF_XDP support +[See more details](https://github.com/networkservicemesh/sdk/issues/1454) -Root issue: https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/859 +### AWS: AF_XDP support -AF_XDP socket doesn't work on AWS cluster -Logs: -``` -Apr 3 13:24:25.406 [INFO] [cmd:vpp] libbpf: Kernel error message: veth: Peer MTU is too large to set XDP -Apr 3 13:24:25.406 [INFO] [cmd:vpp] vpp[10508]: af_xdp: af_xdp_load_program: bpf_set_link_xdp_fd(eth0) failed: Numerical result out of range -Apr 3 13:24:26.563 [ERRO] [cmd:/bin/forwarder] [duration:18.015838ms] [hostIfName:eth0] [vppapi:AfXdpCreate] VPPApiError: System call error #6 (-16) -panic: error: VPPApiError: System call error #6 (-16) + +Root issue: https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/859 + +AF_XDP socket doesn't work on AWS cluster +Logs: +``` +Apr 3 13:24:25.406 [INFO] [cmd:vpp] libbpf: Kernel error message: veth: Peer MTU is too large to set XDP +Apr 3 13:24:25.406 [INFO] [cmd:vpp] vpp[10508]: af_xdp: af_xdp_load_program: bpf_set_link_xdp_fd(eth0) failed: Numerical result out of range +Apr 3 13:24:26.563 [ERRO] [cmd:/bin/forwarder] [duration:18.015838ms] [hostIfName:eth0] [vppapi:AfXdpCreate] VPPApiError: System call error #6 (-16) +panic: error: VPPApiError: System call error #6 (-16) ``` [See more details](https://github.com/networkservicemesh/integration-k8s-aws/issues/356) @@ -45,10 +47,10 @@ panic: error: VPPApiError: System call error #6 (-16) ### AKS: AF_XDP support - -Root issue: https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/859 - -AF_XDP socket doesn't work on AKS cluster + +Root issue: https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/859 + +AF_XDP socket doesn't work on AKS cluster Ping works only without `hostNetwork: true` flag. [See more details](https://github.com/networkservicemesh/integration-k8s-aks/issues/282) @@ -56,16 +58,16 @@ Ping works only without `hostNetwork: true` flag. ### GKE: AF_XDP support - -Root issue: https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/859 - -AF_XDP socket doesn't work on GKE cluster -Logs: -``` -Apr 3 05:38:16.954 [INFO] [cmd:vpp] libbpf: Kernel error message: virtio_net: XDP expects header/data in single page, any_header_sg required -Apr 3 05:38:16.954 [INFO] [cmd:vpp] vpp[10244]: af_xdp: af_xdp_load_program: bpf_set_link_xdp_fd(eth0) failed: Invalid argument -Apr 3 05:38:18.228 [ERRO] [cmd:/bin/forwarder] [duration:12.809608ms] [hostIfName:eth0] [vppapi:AfXdpCreate] VPPApiError: System call error #6 (-16) -panic: error: VPPApiError: System call error #6 (-16) + +Root issue: https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/859 + +AF_XDP socket doesn't work on GKE cluster +Logs: +``` +Apr 3 05:38:16.954 [INFO] [cmd:vpp] libbpf: Kernel error message: virtio_net: XDP expects header/data in single page, any_header_sg required +Apr 3 05:38:16.954 [INFO] [cmd:vpp] vpp[10244]: af_xdp: af_xdp_load_program: bpf_set_link_xdp_fd(eth0) failed: Invalid argument +Apr 3 05:38:18.228 [ERRO] [cmd:/bin/forwarder] [duration:12.809608ms] [hostIfName:eth0] [vppapi:AfXdpCreate] VPPApiError: System call error #6 (-16) +panic: error: VPPApiError: System call error #6 (-16) ``` [See more details](https://github.com/networkservicemesh/integration-k8s-gke/issues/383) @@ -73,19 +75,19 @@ panic: error: VPPApiError: System call error #6 (-16) ### Run all integration tests in parallel -Each integration test is launched in its own namespace. If we launch several tests simultaneously they won't interfere with each other. It will reduce time of testing on CI and also it will improve coverage and quality of the project. - - -**Results:** -| Suite | Old | New | Difference | -| ------------ | -------------- | ------- | ----- | -| Basic Suite | 659.59s | 192.82s | 360.78 % | -| Feature Suite | 972.89s | 283.35s | 343.35 % | -| Heal Suite | 1646.46s | 1667.61s | 0 % | -| Ipsec Suite | 199.73s | 38.52s | 518.51 % | -| Monolith Suite | 242.04s | 258.16s | 0 % | -| Memory Suite | 146.37s | 37.42s | 391.15 % | -| Observability Suite | 97.84s | 89.21s | 0 % | +Each integration test is launched in its own namespace. If we launch several tests simultaneously they won't interfere with each other. It will reduce time of testing on CI and also it will improve coverage and quality of the project. + + +**Results:** +| Suite | Old | New | Difference | +| ------------ | -------------- | ------- | ----- | +| Basic Suite | 659.59s | 192.82s | 360.78 % | +| Feature Suite | 972.89s | 283.35s | 343.35 % | +| Heal Suite | 1646.46s | 1667.61s | 0 % | +| Ipsec Suite | 199.73s | 38.52s | 518.51 % | +| Monolith Suite | 242.04s | 258.16s | 0 % | +| Memory Suite | 146.37s | 37.42s | 391.15 % | +| Observability Suite | 97.84s | 89.21s | 0 % | | Rvlan Suite | 1017.88s | 1018.52s | 0 % | [See more details](https://github.com/networkservicemesh/integration-tests/issues/2769) @@ -100,8 +102,8 @@ Add the possible to compile & run NSM on ARM based machines. ### Update go to v1.20.x - - + + We need to update go to v1.20.x to solve issues with dependencies such like opentelemetry and also to have all benefits from latest go in NSM applications. [See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9216) @@ -109,10 +111,10 @@ We need to update go to v1.20.x to solve issues with dependencies such like open ### Generate code for running commands manually -Currently gotestmd generates only automatic tests. -A test has requirements, the main body and a cleanup. -User is expected to run tests using `go test`. -There is no support to run custom commands without integrating them into the testing system. +Currently gotestmd generates only automatic tests. +A test has requirements, the main body and a cleanup. +User is expected to run tests using `go test`. +There is no support to run custom commands without integrating them into the testing system. Generated commands could be re-used in performance testing to keep performance testing up-to-date. [See more details](https://github.com/networkservicemesh/gotestmd/issues/39) @@ -158,6 +160,62 @@ Status: RESOLVED. +### vL3 DNS is slow when using the DNS search path + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/sdk/issues/1426) + + +### TestVl3_dns is not stable + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9063) + + +### Make sure that NSM candidate selection is working as fast as possible + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/sdk/issues/1438) + + +### Healing after failed refresh + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/sdk/issues/1457) + + +### `kubectl delete` is slow in tests + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9128) + + +### Policy Base Routing failure; Possible table ID collision. + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9119) + + +### DNS resolution doesn't work + +Status: RESOLVED. + +[See more details](https://github.com/projectcalico/vpp-dataplane/issues/584) + + +### Interdomain tests are unstable + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/integration-k8s-kind/issues/777) + + ### cmd-admission-webhook-k8s generates client IDs properly only for Kind: Pod cmd-admission-webhook-k8s generated client IDs properly **only if client kind is Pod**. @@ -188,7 +246,7 @@ Status: RESOLVED. ### Community page stopped showing red arrows when PR from one repo to another failed (or not finished) -Community page stopped showing red arrows when PR from one repo to another failed (or not finished) +Community page stopped showing red arrows when PR from one repo to another failed (or not finished) - https://networkservicemesh.io/community [See more details](https://github.com/networkservicemesh/site/issues/252) @@ -208,6 +266,25 @@ Status: RESOLVED. [See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9242) +### Docker push ghcr workflow works twice + +These runs have the same tag - `f316920` +https://github.com/networkservicemesh/cmd-forwarder-vpp/actions/runs/5332639101/jobs/9662080619 +https://github.com/networkservicemesh/cmd-forwarder-vpp/actions/runs/5332638380/jobs/9662079089 + +It looks like we don't need `workflow_run:` section +https://github.com/networkservicemesh/cmd-template/blob/main/.github/workflows/docker-push-ghcr.yml + +[See more details](https://github.com/networkservicemesh/cmd-template/issues/117) + + +### kernel NSC with multiple NetworkServices + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/sdk/issues/1486) + + ## Release project board diff --git a/content/docs/releases/v1.11.0.md b/content/docs/releases/v1.11.0.md new file mode 100755 index 00000000..d5fa8c4b --- /dev/null +++ b/content/docs/releases/v1.11.0.md @@ -0,0 +1,108 @@ + ++++ +short="v1.11.0" +title = "Release v1.11.0" +date="2023-10-06 00:00:00 +0000 UTC" ++++ + + +# Schedule + +Feature Freeze: 2023-09-19 \ +Release Candidate: 2023-09-26 \ +Release: 2023-10-06 + + +# [DRAFT] NSM Release v1.11.0 + + +NSM v1.11.0 has been tested on: +- [kind](https://github.com/networkservicemesh/integration-k8s-kind/actions?query=branch%3Arelease%2Fv1.11.0+) +- [GKE](https://github.com/networkservicemesh/integration-k8s-gke/actions?query=branch%3Arelease%2Fv1.11.0+) +- [AKS](https://github.com/networkservicemesh/integration-k8s-aks/actions?query=branch%3Arelease%2Fv1.11.0+) +- [AWS/AWS IPv6](https://github.com/networkservicemesh/integration-k8s-aws/actions?query=branch%3Arelease%2Fv1.11.0+) +- [Bare metal in Equinix Metal](https://github.com/networkservicemesh/integration-k8s-packet/actions?query=branch%3Arelease%2Fv1.11.0+) +- [Interdomain GKE/AWS/AKS](https://github.com/networkservicemesh/integration-interdomain-k8s/actions?query=branch%3Arelease%2Fv1.11.0+) + +## Changes since last release + + + +### Update vpp version + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/govpp/issues/9) + + +## System stability fixes and improvements + + + +### Add VPP config for ARM + + + +Add vpp config for ARM. The config will be the same as in this PR - https://github.com/networkservicemesh/cmd-forwarder-vpp/pull/905 + + +[See more details](https://github.com/networkservicemesh/vpphelper/issues/1) + + +### Update all cmd-*-vpp repos that use edwarnicke/vpphelper + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/vpphelper/issues/4) + + +### `Update dependent repositories` workflow does update incorrectly + +`integration-k8s-kind` re-uses [.github workflow](https://github.com/networkservicemesh/.github/blob/main/.github/workflows/update-dependent-repositories-gomod.yaml) +This is wrong, because this workflow updates `integration-k8s-kind` instead of `integration-tests` in dependent repositories (public clusters). +For example: +https://github.com/networkservicemesh/integration-k8s-kind/actions/runs/5656999510/job/15325140836 + +[See more details](https://github.com/networkservicemesh/integration-k8s-kind/issues/862) + + +### Feature Request: Allow configuration of initContainer resource requests and limits + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/cmd-admission-webhook-k8s/issues/292) + + +### Allow setting of registration url via env variable + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/cmd-nse-simple-vl3-docker/issues/119) + + +### "Permission tests" job runs even if there aren't tests require permission in the repo + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/.github/issues/40) + + +### reconnect services dynamically + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9767) + + +### IPSec takes a lot of time on request + +Our current implementation uses IKEv2, that requires `rsa` key. +The thing is the key generation takes about 3-5s - https://github.com/networkservicemesh/sdk-vpp/blob/main/pkg/networkservice/mechanisms/ipsec/common.go + +[See more details](https://github.com/networkservicemesh/sdk-vpp/issues/745) + + + +## Release project board + +[Notes based on](https://github.com/orgs/networkservicemesh/projects/19) diff --git a/content/docs/roadmap/_index.md b/content/docs/roadmap/_index.md deleted file mode 100644 index edcdbc24..00000000 --- a/content/docs/roadmap/_index.md +++ /dev/null @@ -1,4 +0,0 @@ -+++ -title = "Roadmap" -weight = 4 -+++ diff --git a/content/docs/roadmap/v1.3.0.md b/content/docs/roadmap/v1.3.0.md deleted file mode 100644 index ebb98ead..00000000 --- a/content/docs/roadmap/v1.3.0.md +++ /dev/null @@ -1,39 +0,0 @@ -+++ -title = "v1.3.0" -weight = 6 -+++ - -# NSM v1.3.0 - -## Release Schedule - -- **Feature Freeze** - 2022-03-21 -- **Release Candidate** - 2022-03-28 -- **Release** - 2022-04-04 - -## Planned Enhancements - -### vL3 - -Implementation of a virtual Layer 3 (vL3) Network Service(NS) that can be used to provide a common routing domain (or vrf) to which workloads in different clusters/cloud providers may attach. - -### Advanced Healing: condition healing on datapath to NSE being down - -When notified that the control path path is broken, check that the datapath to the NSE is also unreachable before healing. -This will handle more robustly cases where there are temporary issues i the control path but the datapath is still -functioning normally, reducing the circumstances underwhich a heal will be triggered. - -### NSM+Calico-VPP Integration - -Allow NSM to utilize external VPP instances it did not create itself. This would allow NSM and Calico-VPP to share a single -VPP instance on a Node, improving performance in that case. - -Note: NSM will continue to function with any CNI, not just Calico-VPP. - -### Enable Mutually Aware NSEs to overlap in IPAM/Routes - -NSM by default presumes that all NSEs are 'mutually ignorant', meaning they do not know about each other. For this reason, -if an NSM currently precludes 'overlap' in the assigned IPs and requested routes between the various NSEs to which a NSC -is connected. Enabling Mutually Aware NSEs allows this limitation to be loosened in the case that two or more NSEs -signal mutual awareness. This eanbles certain 'multi-homing' cases. - diff --git a/content/docs/roadmap/v1.4.0.md b/content/docs/roadmap/v1.4.0.md deleted file mode 100644 index dbc30b6b..00000000 --- a/content/docs/roadmap/v1.4.0.md +++ /dev/null @@ -1,86 +0,0 @@ -+++ -title = "v1.4.0" -weight = 5 -+++ - -# NSM v1.4.0 - -## Release Schedule - -- **Feature Freeze** - 2022-05-16 -- **Release Candidate** - 2022-05-30 -- **Release** - 2022-06-06 - -## Planned Enhancements - -### Advanced Healing: condition healing on datapath to NSE being down - -When notified that the control path path is broken, check that the datapath to the NSE is also unreachable before healing. -This will handle more robustly cases where there are temporary issues i the control path but the datapath is still -functioning normally, reducing the circumstances underwhich a heal will be triggered. - -### Breaking up an application monolith with NSM - -There are many existing applications in the world which consist of a collection of monolith servers. Most of user also want to be able to progressively break such monoliths up into cloud native apps bit by bit by pulling services out into Pods. -Planned to add a new application that will allow for monolith servers work with required application from k8s via NSM protocols. - -[More Details](https://github.com/networkservicemesh/cmd-nse-simple-vl3-docker/issues/1) - -### Public cluster testing via clusterctl - -This makes our builds consistent and repeatable across a wide variety of infrastructure environments. - -Planned to migrate next repos to the `clusterctl` - -- integration-k8s-aws -- integration-k8s-gke -- integration-k8s-aks - -### Multidomain NSEs - -Adds support for endpoints with services from different domains. NSM users will able to register endpoint that supports services from different domains, it could be local cluster domain, remote cluster domain, floating domain and etc. - - -### DNS over vl3 network - -When created a vl3 network, it could be configured to use a DNS. Then all vl3 members could resolve each other by domain domain. -By default planned to use the next domain scheme: `{{ .workloadName }}.{{ .networkService}}.{{ .clusterName }}`. -This will be achived by adding a new grpc service to manage DNS configuration. The domain scheme planned to be configurable via `go-template`. - -### Update to Go 1.18 - -All NSM repositories based on go planned to be updated to [go1.18](https://go.dev/blog/go1.18). - -### Re-usuable workflows - -Recently GitHub added a new [kind of workflow that can be reused from different repos](https://docs.github.com/en/actions/using-workflows/reusing-workflows). Planned to add this into NSM repositories. That allows to simplify CI and also allows NSM users who is working with SDK will also able to re-use our workflow to be consistent. - -### Advanced vl3 examples - -Planned to add more vl3 examples, such as - -- vl3 network recovery -- vl3 network over floating interdomain -- Scale vl3 network from zero -- Scale vl3 network from zero over floating interdomain - - -### NSM+Application Service Mesh - -Initial example of using NSM to provide flat L3 reachability for spanning an L7 Service Mesh cross cluster for simplified multi-cloud/hybrid service mesh. - - -### Dual-stack examples - -Planned to add IPv4 and IPv6 examples. - - -### Run OVS examples on CI - -Planned to start running OVS examples on vanilla K8s on `bare metal in Equinix Metal`. - - -### Connecting a remote interface without creating a VLAN on top - -In order to facilitate a wider range of virtual environments hosting the Kubernetes cluster it could be feasible to allow the injection an interface into the NSC without creating a vlan on top. Some environments uses vlan in the underlay to provide interfaces for the worker-nodes. Here it might not be tolerated that an additional vlan is added on top ending up with a "Q-in-Q" setup. -Therefore it should be possible to have a plain Ethernet interface injected without adding any additional vlan tagging. \ No newline at end of file diff --git a/content/docs/roadmap/v1.5.0.md b/content/docs/roadmap/v1.5.0.md deleted file mode 100644 index b797b776..00000000 --- a/content/docs/roadmap/v1.5.0.md +++ /dev/null @@ -1,90 +0,0 @@ -+++ -title = "v1.5.0" -weight = 4 -+++ - -# NSM v1.5.0 - -## Release Schedule - -- **Feature Freeze** - 2022-07-18 -- **Release Candidate** - 2022-07-25 -- **Release** - 2022-08-01 - -## Planned Enhancements - - -### Add support for VMs/Bare Metal external clients - -Planned to develop an application to allow for non k8s clients to connect to NSM infrastructure from outside. - -[More Details](https://github.com/networkservicemesh/cmd-nsc-simple-docker/issues/1) - -### Public cluster testing via clusterctl - -This makes our builds consistent and repeatable across a wide variety of infrastructure environments. - -Planned to migrate next repos to the `clusterctl` - -- integration-k8s-aws -- integration-k8s-gke -- integration-k8s-aks - - -### Distributed DNS over vl3 network - -When vl3 NSE starts it creates a new DNS server that knowns each connected to that vl3 NSE network service mesh clients. -By default planned to use the next domain scheme: `{{ .workloadName }}.{{ .networkService}}.{{ .clusterName }}`. -The domain scheme planned to be configurable via `go-template`. If the DNS server doesn't know host then it fanouts the question to other vl3 NSE in the current vl3 network. - - -### Re-usable workflows - -Recently, GitHub added a new [kind of workflow that can be reused from different repos](https://docs.github.com/en/actions/using-workflows/reusing-workflows). Planned to add this into `sdk-.*`/`cmd-.*` NSM repositories. - - -### NSM+Application Service Mesh - - -Planned to add/consider next cases for meshes: Kuma, Linked, Istio, Consul: - -- Run L7 mesh over vl3 network. -- Run L7 mesh as a service in NSM vl3 network (extension case). - -That could simplify multi-cloud cases for the l7 service mesh and also could open new hybrid service mesh scenarios in the future. - - -### vl3 Improvements - -Planned to improve next aspects for the vl3 networks: - -- Use uniform MTU for whole vl3 network. [More Details](https://github.com/networkservicemesh/cmd-nse-vl3-vpp/issues/77) -- Shift vL3 to using one Network Service for connecting clients and a separate one for vL3 NSEs to interconnect with each other -- Shift vL3 to using ClusterProperty for NSCs to select their candidates (including with scale from zero). - - -### Webhook Improvements - -Planned to improve NSM admission webhook and resolve tickets: - -- [Consider support for 'kubectl annotate' operation](https://github.com/networkservicemesh/cmd-admission-webhook-k8s/issues/151) -- [Added support for all container-based k8s resources](https://github.com/networkservicemesh/cmd-admission-webhook-k8s/issues/150) -- [Add support for annotated namespaces](https://github.com/networkservicemesh/cmd-admission-webhook-k8s/issues/126) - -### OPA integration for connection monitor and registries services - -Planned to add OPA policies for connection monitoring and registries services. - -See more details: -- [Integrate OPA with connection monitor service](https://github.com/networkservicemesh/sdk/issues/46) -- [Integrate OPA with registry services](https://github.com/networkservicemesh/sdk/issues/269) - -### Improve stability and bug fixes - -Planned to resolve next issues: - -- https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/656 -- https://github.com/networkservicemesh/sdk/pull/1312 -- https://github.com/networkservicemesh/sdk-vpp/issues/527 - -And all new stability issues that will be reported before the release! \ No newline at end of file diff --git a/content/docs/roadmap/v1.6.0.md b/content/docs/roadmap/v1.6.0.md deleted file mode 100644 index 85a06a1b..00000000 --- a/content/docs/roadmap/v1.6.0.md +++ /dev/null @@ -1,89 +0,0 @@ -+++ -title = "v1.6.0" -weight = 3 -+++ - -# NSM v1.6.0 - -## Release Schedule - -- **Feature Freeze** - 2022-09-05 -- **Release Candidate** - 2022-09-12 -- **Release Notes** - 2022-09-12 -- **Release** - 2022-09-19 - - -## Planned Enhancements - - -### OPA integration for registries services - -Planned to add OPA policies for registries services. - -[See more details](https://github.com/networkservicemesh/sdk/issues/269) - -### Add support for scaling k8s NSM registry - -Planned to improve NSM resiliency and availability via adding a possibility to scale NSM k8s registry. - -[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/6779) - -### Add cluster-info examples - -Planned to add an interdomain example on selecting endpoints via [k8s about api](https://github.com/kubernetes-sigs/about-api) - -### SR-IOV enablement on Equinix Metal n3 servers - -Equinix Metal is planning to make SR-IOV a default configuration on our [new n3 class of servers](https://feedback.equinixmetal.com/changelog/sr-iov-enabled-by-default-on-n3xlarge-servers). - -Planned to improve [integration-k8s-packet](https://github.com/networkservicemesh/integration-k8s-packet) to use new n3 class of servers. - -### Simplify deployments-k8s examples - -Planned to simplify NSM examples via getting rid of creating dynamic files. - -[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/5436) - - -### Public cluster testing via clusterctl - -This makes our builds consistent and repeatable across a wide variety of infrastructure environments. - -Planned to migrate next repos to the `clusterctl` - -- integration-k8s-aws -- integration-k8s-gke -- integration-k8s-aks -- integration-k8s-packet - -### Show demos with L7 Meshes integration - - -Planned to show NSM+L7 mesh integrations: - -- [Kuma](https://github.com/networkservicemesh/deployments-k8s/pull/7079) -- [Istio](https://github.com/networkservicemesh/deployments-k8s/tree/main/examples/interdomain/nsm_istio_booking) -- [Consul](https://github.com/networkservicemesh/deployments-k8s/tree/main/examples/interdomain/nsm_consul) - -On public working group calls to get feedback! - -### Add a new remote mechanism 'IPSec' - -Planned to consider adding a new remote mechanism for [IPSec](https://wiki.debian.org/IPsec) interfaces. - -[See more details](https://wiki.fd.io/view/VPP/IPSec) - - -### Improve integration tests run time - -Planned to improve integration tests run time from ~1.5h to ~45m via parallel tests running. - - -### Implement generator for NSE - -nsm-gen simple generator to generate a main.go, supporting internal/ skeletons, Dockerfile, testing, etc, for a standard NSE. The goal is to make an NSE super easy, and have the developer only need to focus on writing their server chain. - -It might be that a cmd-nse-template might be a better approach, so also consider that option. - -Another consideration might be whether or not the NSE uses VPP. VPP using NSEs might get slightly different generation (VPP in Dockerfile, VPP testing machinery, etc) - diff --git a/content/docs/roadmap/v1.7.0.md b/content/docs/roadmap/v1.7.0.md deleted file mode 100644 index fb421a4d..00000000 --- a/content/docs/roadmap/v1.7.0.md +++ /dev/null @@ -1,61 +0,0 @@ -+++ -title = "v1.7.0" -weight = 2 -+++ - -# NSM v1.7.0 - -## Release Schedule - -- **Feature Freeze** - 2022-11-29 -- **Release Notes** - 2022-11-29 -- **Release Candidate** - 2022-12-6 -- **Release** - 2022-12-13 - - -## Planned Enhancements - -### Zero trusted registry services - -Planned to add [the Path](https://docs.google.com/presentation/d/1QU5FEq7QloLqEjJs-MMMWvcgPzkz6j-OYk-9k2gDTjc/edit#slide=id.g73e6edae28_0_0) for registry services. - -[See more details](https://github.com/networkservicemesh/sdk/issues/1367) - -### Add a new remote mechanism 'IPSec' - -Planned to consider adding a new remote mechanism for [IPSec](https://wiki.debian.org/IPsec) interfaces. - -[See more details](https://wiki.fd.io/view/VPP/IPSec) - -### Implement generator for NSE - -nsm-gen simple generator to generate a main.go, supporting internal/ skeletons, Dockerfile, testing, etc, for a standard NSE. The goal is to make an NSE super easy, and have the developer only need to focus on writing their server chain. - -It might be that a cmd-nse-template might be a better approach, so also consider that option. - -Another consideration might be whether or not the NSE uses VPP. VPP using NSEs might get slightly different generation (VPP in Dockerfile, VPP testing machinery, etc) - -### Add support for IPv6 k8s clusters - -Currently, we're not testing/running NSM on pure IPv6 clusters. -Planned to add support for pure IPv6 clusters and resolve all related issues. - -[See mote details](https://github.com/networkservicemesh/integration-k8s-aws/issues/324) - - -### Run istio over vL3 - -At this momemnt we have integration NSM + Istio via extender case (based on [scale from zero](https://github.com/networkservicemesh/deployments-k8s/tree/main/examples/features/scale-from-zero) feature) - -We planned to provide an alternative integration that will be based on vL3, which should simplify NSM and Istio interaction. - -### Improve UX for NSM examples - -Planned to improve and simplify NSM examples by reducing the count of repeatable setups and also make sure that we're using webhook in each example. - -[See mote details](https://github.com/networkservicemesh/deployments-k8s/issues/7673) - -### Make debugging easier - -Debug problems are extremely complex, having to chase logs across a bunch of different components. -Planned to find a way to make debuggin process easier. diff --git a/content/docs/roadmap/v1.8.0.md b/content/docs/roadmap/v1.8.0.md deleted file mode 100644 index e8063f00..00000000 --- a/content/docs/roadmap/v1.8.0.md +++ /dev/null @@ -1,68 +0,0 @@ -+++ -title = "v1.8.0" -weight = 1 -+++ - -# NSM v1.8.0 - -## Release Schedule - - -- **Feature Freeze** - 2023-02-14 -- **Release Notes** - 2023-02-21 -- **Release Candidate** - 2023-02-16 -- **Release** - 2023-02-28 - - -## Planned Enhancements - - -### Correct error handling - -See more details at https://github.com/networkservicemesh/sdk/issues/705 - -### nsmctl improvements - -Implement and add supports for new cmds: - -``` - get/connections - get/netwrorkservice [@domain] - get/netwrorkserviceendpoints [@domain] - create/netwrorkservice [@domain] - create/netwrorkserviceendpoints [@domai -``` - -See more details at https://github.com/networkservicemesh/nsmctl/issues - -### Add support AF_XDP - - -Currently cmd-forwarder-vpp uses AF_PACKET to bind to an existing Node interface using LinkToAfPacket - -AF_XDP is faster than than AF_PACKET, but AF_XDP is only useable for our purposes from kernel version 5.4 onward. The good news is that lots of places have kernel versions that new (including the more recent version of Docker Desktop). - - -See more details at https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/283 - -### Using services for proxying traffic in the absense of Node.ExternalIP - -Currently, we use cmd-map-ip-k8s to generate a mapping of Node.InternalIPs to Node.ExternalIPs so that the nsmgr-proxy can translate between those IPs as traffic leaves/enters the cluster. - -This works great for clusters setup with per-Node ExternalIPs. Sadly, this is not all Nodes. - -For the case when Nodes do not have a Node.ExternalIPs, we do have the option of using Services.ExternalIP for the same purpose. - -The lack of Node.ExternalIPs can be compensated for by creating a Service of type LoadBalancer for each Node and using Services without selectors to direct that Service to the Node.InternalIP. - -See more details at https://github.com/networkservicemesh/cmd-nsmgr-proxy/issues - -### Make SRIOV VFs to push/pop tags like vlan or vxlan. - -See more details at https://github.com/networkservicemesh/sdk-sriov/issues/489 - -### Improve system stability - -- https://github.com/networkservicemesh/deployments-k8s/issues/8351 -- https://github.com/networkservicemesh/deployments-k8s/issues/8385 -- https://github.com/networkservicemesh/cmd-registry-k8s/issues/362 diff --git a/layouts/partials/docs/hero.html b/layouts/partials/docs/hero.html index a3c4f438..cf036a4e 100644 --- a/layouts/partials/docs/hero.html +++ b/layouts/partials/docs/hero.html @@ -36,6 +36,9 @@ {{ $title := cond (isset .Params "short") .Params.short .Title }} {{ $isCurrentSection := eq .Title $currentSection }} {{ $link := (index (where .Pages ".Weight" 1) 0).RelPermalink }} + {{ if not $link }} + {{ $link = (index .Pages.ByDate.Reverse 0).RelPermalink }} + {{ end}} {{ $title }} From ccfd40259a778ad075300bb8f7b8c89264d244cc Mon Sep 17 00:00:00 2001 From: Denis Tingaikin Date: Tue, 26 Sep 2023 02:36:55 +0300 Subject: [PATCH 2/5] add yamllit config Signed-off-by: Denis Tingaikin --- .github/workflows/ci.yaml | 4 +++- .github/yamllint.yml | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .github/yamllint.yml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 046a3151..e302ff90 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,4 +5,6 @@ on: jobs: yamllint: - uses: networkservicemesh/.github/.github/workflows/yamllint.yaml@main \ No newline at end of file + uses: networkservicemesh/.github/.github/workflows/yamllint.yaml@main + with: + config_file: "./.github/yamllint.yml" \ No newline at end of file diff --git a/.github/yamllint.yml b/.github/yamllint.yml new file mode 100644 index 00000000..c6459dc1 --- /dev/null +++ b/.github/yamllint.yml @@ -0,0 +1,10 @@ +--- +extends: default + +yaml-files: + - '*.yaml' + - '*.yml' + +rules: + truthy: disable + line-length: disable From 766ef546bd4665d3d70a65c063ec6680599152c4 Mon Sep 17 00:00:00 2001 From: Denis Tingaikin Date: Tue, 26 Sep 2023 02:38:37 +0300 Subject: [PATCH 3/5] fix yamllint Signed-off-by: Denis Tingaikin --- .github/workflows/ci.yaml | 2 +- .github/workflows/pr-for-updates.yaml | 2 +- .github/workflows/sync.yaml | 2 +- .htmltest.yml | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e302ff90..3e26d454 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,4 +7,4 @@ jobs: yamllint: uses: networkservicemesh/.github/.github/workflows/yamllint.yaml@main with: - config_file: "./.github/yamllint.yml" \ No newline at end of file + config_file: "./.github/yamllint.yml" diff --git a/.github/workflows/pr-for-updates.yaml b/.github/workflows/pr-for-updates.yaml index 4561cf6a..86c9ea96 100644 --- a/.github/workflows/pr-for-updates.yaml +++ b/.github/workflows/pr-for-updates.yaml @@ -8,4 +8,4 @@ jobs: auto-pull-request: uses: networkservicemesh/.github/.github/workflows/pr-for-updates.yaml@main secrets: - token: ${{ secrets.NSM_BOT_GITHUB_TOKEN }} \ No newline at end of file + token: ${{ secrets.NSM_BOT_GITHUB_TOKEN }} diff --git a/.github/workflows/sync.yaml b/.github/workflows/sync.yaml index 597a5e58..af35e475 100644 --- a/.github/workflows/sync.yaml +++ b/.github/workflows/sync.yaml @@ -22,7 +22,7 @@ jobs: echo Sync up NSM site with project boards $(date) > /tmp/commit-message echo "Commit Message:" cat /tmp/commit-message - - name: Push update to the + - name: Push update to the run: | git config --global user.email "nsmbot@networkservicmesh.io" git config --global user.name "NSMBot" diff --git a/.htmltest.yml b/.htmltest.yml index 50cbb62c..3f0d5c04 100644 --- a/.htmltest.yml +++ b/.htmltest.yml @@ -1,3 +1,4 @@ +--- DirectoryPath: public IgnoreDirectoryMissingTrailingSlash: true CheckExternal: false From 706b886bca8d7f51596da3cd0002c9e017137ade Mon Sep 17 00:00:00 2001 From: denis-tingaikin Date: Fri, 6 Oct 2023 21:17:24 +0300 Subject: [PATCH 4/5] run 'make fetch-notes manually' Signed-off-by: denis-tingaikin --- content/docs/releases/v1.11.0.md | 145 +++++++++++++++++++++++++------ 1 file changed, 119 insertions(+), 26 deletions(-) diff --git a/content/docs/releases/v1.11.0.md b/content/docs/releases/v1.11.0.md index d5fa8c4b..cdebf299 100755 --- a/content/docs/releases/v1.11.0.md +++ b/content/docs/releases/v1.11.0.md @@ -6,14 +6,7 @@ date="2023-10-06 00:00:00 +0000 UTC" +++ -# Schedule - -Feature Freeze: 2023-09-19 \ -Release Candidate: 2023-09-26 \ -Release: 2023-10-06 - - -# [DRAFT] NSM Release v1.11.0 +# NSM Release v1.11.0 NSM v1.11.0 has been tested on: @@ -26,46 +19,81 @@ NSM v1.11.0 has been tested on: ## Changes since last release +### Add LoadBalancer for vl3 networks +NSM vl3 could be perceived as an alternative to k8s networks. Currently, k8s service is the most useful thing in the k8s network. -### Update vpp version +At this moment, NSM vl3 netowk doesn't provide any alternative to k8s services. So we need to consider and implement the best solution for it. -Status: RESOLVED. +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9210) -[See more details](https://github.com/networkservicemesh/govpp/issues/9) +### Add interdomain healing examples +Currently, we don't test healing over interdomain or floating interdomain. So we could add some examples of how to do that. -## System stability fixes and improvements +Scenarios: +- Forwarders death in floating interdomain scenario +- NSE death in floating interdomain scenario +- NSM systems death in floating interdomain scenario +- Proxy nsmgrs death in interdomain scenario +- NSMGRs death in interdomain scenario +- Registry death in interdomain scenario +We need to check scenarious from single cluster testing in multicluster scenarious. +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9647) -### Add VPP config for ARM - - -Add vpp config for ARM. The config will be the same as in this PR - https://github.com/networkservicemesh/cmd-forwarder-vpp/pull/905 +### Add health checks for vpp based apps +We'd added datapath checks for kernel ifaces. https://github.com/networkservicemesh/sdk-kernel/blob/main/pkg/kernel/tools/heal/liveness_check.go -[See more details](https://github.com/networkservicemesh/vpphelper/issues/1) +[See more details](https://github.com/networkservicemesh/sdk-vpp/issues/737) + + +## System stability fixes and improvements -### Update all cmd-*-vpp repos that use edwarnicke/vpphelper + +### No artifacts after CI run on public clusters Status: RESOLVED. -[See more details](https://github.com/networkservicemesh/vpphelper/issues/4) +[See more details](https://github.com/networkservicemesh/integration-tests/issues/2874) ### `Update dependent repositories` workflow does update incorrectly -`integration-k8s-kind` re-uses [.github workflow](https://github.com/networkservicemesh/.github/blob/main/.github/workflows/update-dependent-repositories-gomod.yaml) -This is wrong, because this workflow updates `integration-k8s-kind` instead of `integration-tests` in dependent repositories (public clusters). -For example: +`integration-k8s-kind` re-uses [.github workflow](https://github.com/networkservicemesh/.github/blob/main/.github/workflows/update-dependent-repositories-gomod.yaml) +This is wrong, because this workflow updates `integration-k8s-kind` instead of `integration-tests` in dependent repositories (public clusters). +For example: https://github.com/networkservicemesh/integration-k8s-kind/actions/runs/5656999510/job/15325140836 [See more details](https://github.com/networkservicemesh/integration-k8s-kind/issues/862) +### How can i make composition of endpoints? + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9676) + + +### IPSec takes a lot of time on request + +Our current implementation uses IKEv2, that requires `rsa` key. +The thing is the key generation takes about 3-5s - https://github.com/networkservicemesh/sdk-vpp/blob/main/pkg/networkservice/mechanisms/ipsec/common.go + +[See more details](https://github.com/networkservicemesh/sdk-vpp/issues/745) + + +### Routing between 2 containers + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9864) + + ### Feature Request: Allow configuration of initContainer resource requests and limits Status: RESOLVED. @@ -73,6 +101,20 @@ Status: RESOLVED. [See more details](https://github.com/networkservicemesh/cmd-admission-webhook-k8s/issues/292) +### MatchesMonitorScopeSelector helper function checks only one field + +[MatchesMonitorScopeSelector](https://github.com/networkservicemesh/api/blob/main/pkg/api/networkservice/connection_helpers.go + +[See more details](https://github.com/networkservicemesh/api/issues/164) + + +### Add release automation for integration-k8s-${platform} repos + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/integration-tests/issues/1667) + + ### Allow setting of registration url via env variable Status: RESOLVED. @@ -87,6 +129,23 @@ Status: RESOLVED. [See more details](https://github.com/networkservicemesh/.github/issues/40) +### Log rotated after 5 minutes in NSMgr / Registry + + + +To fix a possible increased latency due to logging in forwarder-vpp we could add a new chain element for min logging if current log level is not equal TRACE + +- Log input to server chain + - Return from server chain + - Output from client chain + - Return to client chain + + + + +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9726) + + ### reconnect services dynamically Status: RESOLVED. @@ -94,12 +153,46 @@ Status: RESOLVED. [See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9767) -### IPSec takes a lot of time on request +### questions: dpdk plugin / VCL / service graph topology -Our current implementation uses IKEv2, that requires `rsa` key. -The thing is the key generation takes about 3-5s - https://github.com/networkservicemesh/sdk-vpp/blob/main/pkg/networkservice/mechanisms/ipsec/common.go +Status: RESOLVED. -[See more details](https://github.com/networkservicemesh/sdk-vpp/issues/745) +[See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9777) + + +### Endless retries on error + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/sdk/issues/1500) + + +### Missed red arrows on community page + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/site/issues/256) + + +### Automate updating versing of 'go' + +Updating version of 'go' is a very monotonous and most importantly time-consuming task since we need to update all our repositories (https://github.com/networkservicemesh?q=&type=all&language=go&sort= we have 54 repos) + +[See more details](https://github.com/networkservicemesh/.github/issues/36) + + +### Forwarder sometimes crashes with segmentation fault after restart + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/953) + + +### netsvcmonitor chain element: nse doesn't match with networkservice + +Status: RESOLVED. + +[See more details](https://github.com/networkservicemesh/sdk/issues/1521) From 928c14efac5a7f60ba28d7f6f1b7c4cc6dc975fd Mon Sep 17 00:00:00 2001 From: denis-tingaikin Date: Tue, 5 Dec 2023 12:22:40 +0300 Subject: [PATCH 5/5] fix comments Signed-off-by: denis-tingaikin --- content/docs/releases/v1.11.0.md | 6 +++--- content/docs/releases/v1.7.0.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/docs/releases/v1.11.0.md b/content/docs/releases/v1.11.0.md index cdebf299..c00e993f 100755 --- a/content/docs/releases/v1.11.0.md +++ b/content/docs/releases/v1.11.0.md @@ -23,7 +23,7 @@ NSM v1.11.0 has been tested on: NSM vl3 could be perceived as an alternative to k8s networks. Currently, k8s service is the most useful thing in the k8s network. -At this moment, NSM vl3 netowk doesn't provide any alternative to k8s services. So we need to consider and implement the best solution for it. +At this moment, NSM vl3 network doesn't provide any alternative to k8s services. So we need to consider and implement the best solution for it. [See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9210) @@ -39,7 +39,7 @@ Scenarios: - NSMGRs death in interdomain scenario - Registry death in interdomain scenario -We need to check scenarious from single cluster testing in multicluster scenarious. +We need to check scenarios from single cluster testing in multicluster scenarios. [See more details](https://github.com/networkservicemesh/deployments-k8s/issues/9647) @@ -81,7 +81,7 @@ Status: RESOLVED. ### IPSec takes a lot of time on request -Our current implementation uses IKEv2, that requires `rsa` key. +Our current implementation uses IKEv2 which requires an `rsa` key. The thing is the key generation takes about 3-5s - https://github.com/networkservicemesh/sdk-vpp/blob/main/pkg/networkservice/mechanisms/ipsec/common.go [See more details](https://github.com/networkservicemesh/sdk-vpp/issues/745) diff --git a/content/docs/releases/v1.7.0.md b/content/docs/releases/v1.7.0.md index 793c73f7..0cea62b1 100644 --- a/content/docs/releases/v1.7.0.md +++ b/content/docs/releases/v1.7.0.md @@ -19,7 +19,7 @@ NSM v1.7.0 has been tested on Added [Path](https://docs.google.com/presentation/d/1QU5FEq7QloLqEjJs-MMMWvcgPzkz6j-OYk-9k2gDTjc/edit#slide=id.g73e6edae28_0_0) support for registry services. -The main difference *registry Path* with *netowkrservice.Path* is that еру full path doesn't store in the registry model. +The main difference *registry Path* with *networkrservice.Path* is that еру full path doesn't store in the registry model. Instead of it, path a public and private Path. The public path is a human-readable slice of strings that represents the Path of registry IDs that which model visited to reach the final registry.