diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 9f38c54aa1e..40c94e02f5c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,32 +1,29 @@ --- -name: Bug/issue report +name: πŸ› Bug Report about: Report an issue to help improve the project. title: '' labels: 'kind/bug' assignees: '' --- -**Description** +#### Description -**Expected Behavior** +#### Expected Behavior -**Screenshots** +#### Screenshots/Logs -**Environment:** - - OS: [e.g. Ubuntu] - - Browser: [e.g. Chrome, Safari] - - Version: [e.g. 22] - - Device: [e.g. laptop, iPhone 8] +#### Environment: +- Host OS: +- Meshery Version: +- Kubernetes Version: +- Browser: ---- -[Optional] **To Reproduce** + diff --git a/.github/ISSUE_TEMPLATE/ci.md b/.github/ISSUE_TEMPLATE/ci.md new file mode 100644 index 00000000000..7e0da20e5be --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ci.md @@ -0,0 +1,21 @@ +--- +name: πŸ›  Continuous Integration / DevOps +about: Improve or update workflows or other automation +title: '[CI]' +labels: 'area/ci' +assignees: '' +--- +#### Current Behavior + + +#### Desired Behavior + + +#### Implementation + + +#### Acceptance Tests + + +#### Reference: +- [Meshery Build & Release Strategy](https://docs.google.com/document/d/11nAxYtz2SUusCYZ0JeNRrOLIxkgmmbUVWz63MBZV2oE/edit#) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000000..e1373968daa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: +- name: πŸ™‹πŸΎπŸ™‹πŸΌβ€Question + url: https://github.com/layer5io/meshery/discussions/new + about: Submit your question using GitHub Discussions. diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md index bdbe6573c27..40fbf2f02ef 100644 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -1,5 +1,5 @@ --- -name: Documentation issue +name: πŸ“„ Documentation issue about: Issues related to documentation. title: '[Docs]' labels: 'area/docs' @@ -7,12 +7,10 @@ assignees: '' --- **Current State:** - **Desired State:** - --- **Contributor Resources** -- [Meshery documentation site](https://meshery.layer5.io/docs/) +- [Meshery documentation site](https://docs.meshery.io/) - [Meshery documentation source](https://github.com/layer5io/meshery/tree/master/docs) - [Instructions for contributing to documentation](https://github.com/layer5io/meshery/blob/master/CONTRIBUTING.md#documentation-contribution-flow) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 3ab1875a666..fddf8021af9 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,26 +1,24 @@ --- -name: Feature Request -about: Suggest an enhancement to this project. +name: πŸ’‘ Feature Request +about: Suggest an enhancement to Meshery. title: '' labels: 'kind/enhancement' assignees: '' --- - -**Current Behavior** +#### Current Behavior - -**Desired Behavior** +#### Desired Behavior - --- -**Implementation** - +[Optional] -**Mockups** - +#### Implementation + -**Acceptance Tests** +#### Acceptance Tests +#### Mockups + diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md deleted file mode 100644 index 87f4798205e..00000000000 --- a/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: General question -about: Request information about the project; clarify behavior of the software -title: '[Question]' -labels: 'kind/question' -assignees: '' ---- - -**How can we help?** - diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1b6e7befb22..4109eb3c266 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -5,7 +5,7 @@ This PR fixes # **Notes for Reviewers** -**[Signed commits](../CONTRIBUTING.md#signing-off-on-commits-developer-certificate-of-origin)** +**[Signed commits](https://github.com/layer5io/meshery/blob/master/CONTRIBUTING.md#signing-off-on-commits-developer-certificate-of-origin)** - [ ] Yes, I signed my commits. diff --git a/.github/assets/images/buttons/community.png b/.github/assets/images/buttons/community.png new file mode 100644 index 00000000000..026afba6c1c Binary files /dev/null and b/.github/assets/images/buttons/community.png differ diff --git a/.github/assets/images/buttons/landscape.png b/.github/assets/images/buttons/landscape.png new file mode 100644 index 00000000000..909e4052ee9 Binary files /dev/null and b/.github/assets/images/buttons/landscape.png differ diff --git a/.github/assets/images/buttons/smps.png b/.github/assets/images/buttons/smps.png new file mode 100644 index 00000000000..b4c5fc67cf5 Binary files /dev/null and b/.github/assets/images/buttons/smps.png differ diff --git a/.github/assets/images/git-signoff-vscode.png b/.github/assets/images/git-signoff-vscode.png new file mode 100644 index 00000000000..2e7397e31cc Binary files /dev/null and b/.github/assets/images/git-signoff-vscode.png differ diff --git a/.github/assets/images/image-hub/layer5-image-hub.png b/.github/assets/images/image-hub/layer5-image-hub.png new file mode 100644 index 00000000000..45c13e67f67 Binary files /dev/null and b/.github/assets/images/image-hub/layer5-image-hub.png differ diff --git a/.github/assets/images/layer5/5-light-bg.png b/.github/assets/images/layer5/5-light-bg.png new file mode 100644 index 00000000000..974c238b8fe Binary files /dev/null and b/.github/assets/images/layer5/5-light-bg.png differ diff --git a/.github/assets/images/layer5/layer5-tag-white-bg.png b/.github/assets/images/layer5/layer5-tag-white-bg.png new file mode 100644 index 00000000000..04696b3b978 Binary files /dev/null and b/.github/assets/images/layer5/layer5-tag-white-bg.png differ diff --git a/.github/assets/images/meshery/meshery-logo-tag-light-text-side.png b/.github/assets/images/meshery/meshery-logo-tag-light-text-side.png new file mode 100644 index 00000000000..824b05d65ef Binary files /dev/null and b/.github/assets/images/meshery/meshery-logo-tag-light-text-side.png differ diff --git a/.github/assets/images/meshery/meshery-logo.svg b/.github/assets/images/meshery/meshery-logo.svg new file mode 100644 index 00000000000..d780b7658ec --- /dev/null +++ b/.github/assets/images/meshery/meshery-logo.svg @@ -0,0 +1 @@ +meshery-logo \ No newline at end of file diff --git a/.github/assets/images/slack.png b/.github/assets/images/slack.png new file mode 100644 index 00000000000..a6de7ef9cec Binary files /dev/null and b/.github/assets/images/slack.png differ diff --git a/.github/assets/images/smi-conformance/checklist.svg b/.github/assets/images/smi-conformance/checklist.svg new file mode 100644 index 00000000000..98498daef61 --- /dev/null +++ b/.github/assets/images/smi-conformance/checklist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/.github/assets/images/smp-dark-text.svg b/.github/assets/images/smp-dark-text.svg new file mode 100644 index 00000000000..0dd4ccbe21f --- /dev/null +++ b/.github/assets/images/smp-dark-text.svg @@ -0,0 +1 @@ +smp-dark-text \ No newline at end of file diff --git a/.github/assets/images/twitter.png b/.github/assets/images/twitter.png new file mode 100644 index 00000000000..6ee70abbcf1 Binary files /dev/null and b/.github/assets/images/twitter.png differ diff --git a/.github/autolabeler.yml b/.github/autolabeler.yml deleted file mode 100644 index 5741a3a45dc..00000000000 --- a/.github/autolabeler.yml +++ /dev/null @@ -1,11 +0,0 @@ -area/docs: ["/docs"] -area/ui: ["/ui", "/provider-ui"] -area/ci: ["/.github"] -component/mesheryctl: ["/mesheryctl"] -component/api: ["/handlers"] -language/go: ["*.go"] -language/markdown: ["*.md"] -language/javascript: ["*.js"] -backend: ["/app", "*.rb"] -legal: ["LICENSE*", "NOTICES*"] - diff --git a/.github/config.yml b/.github/config.yml index eddb9d6bd4b..dfa01dd8229 100644 --- a/.github/config.yml +++ b/.github/config.yml @@ -2,7 +2,12 @@ # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome # Comment to be posted to on first time issues newIssueWelcomeComment: > - Thanks for opening this issue. A contributor will be by to give feedback soon. In the meantime, please review the [Layer5 Contributors' Welcome Guide](https://docs.google.com/document/d/17OPtDE_rdnPQxmk2Kauhm3GwXF1R5dZ3Cj8qZLKdo5E/edit?usp=sharing) and sure to join the [community Slack](http://slack.layer5.io/). + Thanks for opening this issue. A contributor will be by to give feedback soon. In the meantime, please review the [Layer5 Contributors' Welcome Guide](https://docs.google.com/document/d/17OPtDE_rdnPQxmk2Kauhm3GwXF1R5dZ3Cj8qZLKdo5E/edit?usp=sharing) and be sure to join the [community Slack](http://slack.layer5.io/). + \ + \ Let us know how you would like to proceed: + \ 1. You would like an existing contributor in the community to address this issue. + \ 1. You would like to address (fix) this issue. + # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome # Comment to be posted to on PRs from first time contributors in your repository newPRWelcomeComment: > @@ -15,10 +20,12 @@ newPRWelcomeComment: > # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge # Comment to be posted to on pull requests merged by a first time user firstPRMergeComment: > - Thanks for your contribution to the Layer5 community! :tada: - +         Thank you for contributing to the Layer5 community! :tada: + \ + \ ![Congrats!](https://raw.githubusercontent.com/layer5io/meshery/master/.github/welcome/Layer5-celebration.png) - + \ + \         :star: Please leave a [star on the project](../stargazers). :smile: #------------------------------------------------------------------------------- diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..d101bc5570e --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,64 @@ +version: 2 +updates: +- package-ecosystem: gomod + directory: "/" + schedule: + interval: monthly + open-pull-requests-limit: 10 + labels: + - pr/dependencies + - kind/chore + ignore: + - dependency-name: github.com/prologic/bitcask + versions: + - "> 0.3.9" + - "< 0.4" + - dependency-name: k8s.io/api + versions: + - ">= 0.20.a" + - "< 0.21" + - dependency-name: k8s.io/apimachinery + versions: + - ">= 0.20.a" + - "< 0.21" + - dependency-name: k8s.io/client-go + versions: + - ">= 0.20.a" + - "< 0.21" +- package-ecosystem: npm + directory: "/ui" + schedule: + interval: monthly + open-pull-requests-limit: 10 + reviewers: + - dhruv0000 + labels: + - kind/chore + - pr/dependencies + ignore: + - dependency-name: "@material-ui/core" + versions: + - "> 4.9.13" + - "< 5" + - dependency-name: next + versions: + - "> 10.0.1" + - "< 10.1" + - dependency-name: next-redux-wrapper + versions: + - ">= 6.a" + - "< 7" + - dependency-name: react-select + versions: + - ">= 3.1.a" + - "< 3.2" +- package-ecosystem: npm + directory: "/provider-ui" + schedule: + interval: monthly + open-pull-requests-limit: 10 + reviewers: + - ramrodo + labels: + - kind/chore + - pr/dependencies diff --git a/.github/stale.yml b/.github/stale.yml index d47fe5be0e0..c6b273d3180 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,5 +1,5 @@ # Number of days of inactivity before an issue becomes stale -daysUntilStale: 45 +daysUntilStale: 40 # Number of days of inactivity before a stale issue is closed daysUntilClose: 10 # Issues with these labels will never be considered stale diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index b008c29e182..1f365fb8b8e 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -1,6 +1,8 @@ -name: Mesheryctl Build and Releaser +name: Meshery Build and Releaser on: push: + paths-ignore: + - 'docs/**' branches: - 'master' tags: @@ -8,7 +10,8 @@ on: jobs: build_release: - name: Mesheryctl build & release + name: Meshery build & release + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() runs-on: macos-latest steps: - name: Check out code @@ -27,15 +30,17 @@ jobs: restore-keys: | ${{ runner.os }}-go- - name: goreleaser with tag - uses: goreleaser/goreleaser-action@v1 - if: success() && startsWith(github.ref, 'refs/tags/') + uses: goreleaser/goreleaser-action@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_PAT }} + RELEASE_CHANNEL: "stable" with: version: latest args: release --rm-dist --skip-validate docker: name: Docker build and push + env: + RELEASE_CHANNEL: "stable" runs-on: ubuntu-latest steps: - name: Check out code @@ -49,8 +54,10 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} - name: Docker edge build & tag if: startsWith(github.ref, 'refs/tags/') != true && success() + env: + RELEASE_CHANNEL: "edge" run: | - DOCKER_BUILDKIT=1 docker build --no-cache -t ${{ secrets.IMAGE_NAME }}:edge-latest --build-arg TOKEN=${{ secrets.GLOBAL_TOKEN }} --build-arg GIT_COMMITSHA=${GITHUB_SHA::7} . + DOCKER_BUILDKIT=1 docker build --no-cache -t ${{ secrets.IMAGE_NAME }}:edge-latest --build-arg TOKEN=${{ secrets.GLOBAL_TOKEN }} --build-arg GIT_COMMITSHA=${GITHUB_SHA::7} --build-arg GIT_VERSION="edge-latest" --build-arg RELEASE_CHANNEL=${RELEASE_CHANNEL} . docker tag ${{ secrets.IMAGE_NAME }}:edge-latest ${{ secrets.IMAGE_NAME }}:edge-${GITHUB_SHA::7} - name: Docker edge push if: startsWith(github.ref, 'refs/tags/') != true && success() @@ -60,7 +67,7 @@ jobs: - name: Docker stable build & tag if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() run: | - DOCKER_BUILDKIT=1 docker build --no-cache -t ${{ secrets.IMAGE_NAME }}:stable-latest --build-arg TOKEN=${{ secrets.GLOBAL_TOKEN }} --build-arg GIT_COMMITSHA=${GITHUB_SHA::7} --build-arg GIT_VERSION=${GITHUB_REF/refs\/tags\//} . + DOCKER_BUILDKIT=1 docker build --no-cache -t ${{ secrets.IMAGE_NAME }}:stable-latest --build-arg TOKEN=${{ secrets.GLOBAL_TOKEN }} --build-arg GIT_COMMITSHA=${GITHUB_SHA::7} --build-arg GIT_VERSION=${GITHUB_REF/refs\/tags\//} --build-arg RELEASE_CHANNEL=${RELEASE_CHANNEL} . docker tag ${{ secrets.IMAGE_NAME }}:stable-latest ${{ secrets.IMAGE_NAME }}:stable-${GITHUB_REF/refs\/tags\//} docker tag ${{ secrets.IMAGE_NAME }}:stable-latest ${{ secrets.IMAGE_NAME }}:stable-${GITHUB_SHA::7} - name: Docker stable push @@ -76,3 +83,24 @@ jobs: DOCKERHUB_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKERHUB_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} DOCKERHUB_REPOSITORY: ${{ secrets.IMAGE_NAME }} + notify-providers: + name: Notify Remote Providers + needs: docker + runs-on: ubuntu-latest + steps: + - name: trigger plugins for edge + if: startsWith(github.ref, 'refs/tags/') != true && success() + uses: kumarabd/trigger-remote-action@master + with: + name: "Build and Publish" + repo: layer5labs/meshery-extensions + token: ${{ secrets.GITHUB_PAT }} + version: edge-latest + - name: trigger plugins for edge + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() + uses: kumarabd/trigger-remote-action@master + with: + name: "Build and Publish" + repo: layer5labs/meshery-extensions + token: ${{ secrets.GITHUB_PAT }} + version: ${GITHUB_REF/refs\/tags\//} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3fec6c3a061..2a179ae6daa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,11 +3,19 @@ on: push: branches: - 'master' - tags: - - 'v*' + paths-ignore: + - 'docs/**' pull_request: branches: - 'master' + paths-ignore: + - 'docs/**' + workflow_dispatch: + inputs: + logLevel: + description: 'Log level' + required: true + default: 'warning' jobs: golangci: @@ -16,10 +24,10 @@ jobs: steps: - uses: actions/checkout@v2 - name: golangci-lint - uses: golangci/golangci-lint-action@v1 + uses: golangci/golangci-lint-action@v2 with: # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. - version: v1.29 + version: v1.32 # Optional: working directory, useful for monorepos # working-directory: somedir @@ -48,7 +56,7 @@ jobs: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go- + ${{ runner.os }}-go- - run: GOPROXY=direct GOSUMDB=off GO111MODULE=on go test -tags draft ./... build-backend: name: Backend build @@ -68,8 +76,15 @@ jobs: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go- - - run: GOPROXY=direct GOSUMDB=off GO111MODULE=on go build -tags draft ./cmd/main.go + ${{ runner.os }}-go- + - run: | + go mod tidy + GOPROXY=direct GOSUMDB=off GO111MODULE=on go build -tags draft ./cmd/main.go + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: meshery + path: ./main build-ui: name: UI build runs-on: ubuntu-latest @@ -81,46 +96,150 @@ jobs: - uses: actions/setup-node@v1 with: node-version: ${{ secrets.NODE_VERSION }} - - uses: actions/cache@v1 + - name: Cache node modules + id: node-cache + uses: actions/cache@v2 with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + path: | + ~/cache + ~/.cache + !~/cache/exclude + **/node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/lockfiles') }} restore-keys: | ${{ runner.os }}-node- - - run: | + - name: Install dependencies + run: | cd ui npm i - npm run build && npm run export cd .. cd provider-ui npm i - npm run build && npm run export + - name: build app + run: | + make build-ui tests-ui: - name: UI tests + needs: [build-ui] + name: UI integration tests runs-on: ubuntu-latest steps: - name: Check out code - uses: actions/checkout@master + uses: actions/checkout@v2 with: - fetch-depth: 1 + fetch-depth: 0 - uses: actions/setup-node@v1 with: node-version: ${{ secrets.NODE_VERSION }} - - uses: actions/cache@v1 + - name: Cache node modules + id: node-cache + uses: actions/cache@v2 with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - run: | + path: | + ~/cache + ~/.cache + !~/cache/exclude + **/node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/lockfiles') }} + - name: Run tests + run: | cd ui npm i - npm test + npm run ci-test-integration cd .. cd provider-ui npm i npm test cd .. + - name: Upload coverage to Codecov (ui) + uses: codecov/codecov-action@v1 + with: + files: ./provider-ui/coverage/coverage-summary.json + directory: ./provider-ui/coverage/lcov-report + flags: integrationtests + fail_ci_if_error: true + tests-ui-e2e: + needs: [build-backend, build-ui] + name: UI end-to-end tests + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Check out meshery-consul code + uses: actions/checkout@v2 + with: + repository: layer5io/meshery-consul + path: ./meshery-consul + - name: Download artifacts + uses: actions/download-artifact@v2 + with: + name: meshery + - name: Setup go + uses: actions/setup-go@v1 + with: + go-version: ${{ secrets.GO_VERSION }} + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: ${{ secrets.NODE_VERSION }} + - name: Cache node modules + id: node-cache + uses: actions/cache@v2 + with: + path: | + ~/cache + ~/.cache + !~/cache/exclude + **/node_modules + key: ${{ runner.os }}-node-${{ hashFiles('**/lockfiles') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Create k8s Kind Cluster + uses: helm/kind-action@v1.1.0 + with: + cluster_name: "kind-cluster" + - name: Build Next App + run: | + cd ui + npm i + npm run build + npm run export + - name: Update /etc/hosts + run: echo "127.0.0.1 mesherylocal.layer5.io" | sudo tee -a /etc/hosts + - name: Run meshery-consul + run: | + mkdir /home/runner/.meshery + cd ./meshery-consul + go run main.go & + sleep 10 + - name: Run backend + env: + PROVIDER_BASE_URLS: https://meshery.layer5.io + PORT: 9081 + ADAPTER_URLS: "mesherylocal.layer5.io:10000 mesherylocal.layer5.io:10001 mesherylocal.layer5.io:10002 mesherylocal.layer5.io:10003 mesherylocal.layer5.io:10004 mesherylocal.layer5.io:10008 mesherylocal.layer5.io:10009 mesherylocal.layer5.io:10007" + run: | + chmod +x ./main + ./main & + - name: Cypress run + uses: cypress-io/github-action@v2 + with: + working-directory: ui + start: npm start + wait-on: http://localhost:3000 + spec: cypress/integration/e2e/**/* + record: true + tag: node-${{ matrix.node }} + env: + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Upload coverage to Codecov (ui) + uses: codecov/codecov-action@v1 + with: + files: ./ui/coverage/coverage-summary.json + directory: ./ui/coverage/lcov-report + flags: e2etests + fail_ci_if_error: true mesheryctl_build: name: Mesheryctl build & release runs-on: macos-latest @@ -140,10 +259,40 @@ jobs: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go- + ${{ runner.os }}-go- - name: goreleaser WITHOUT tag uses: goreleaser/goreleaser-action@v1 if: success() && startsWith(github.ref, 'refs/tags/') == false + env: + RELEASE_CHANNEL: "edge" with: version: latest - args: release --snapshot --skip-publish --rm-dist \ No newline at end of file + args: release --snapshot --skip-publish --rm-dist + docker-build-test: + name: Docker build + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@master + with: + fetch-depth: 1 + - name: Docker edge build & tag + if: startsWith(github.ref, 'refs/tags/') != true && success() + env: + RELEASE_CHANNEL: "edge" + run: | + DOCKER_BUILDKIT=1 docker build --no-cache -t meshery:edge-latest --build-arg TOKEN=test --build-arg GIT_COMMITSHA=${GITHUB_SHA::7} --build-arg RELEASE_CHANNEL=${RELEASE_CHANNEL} . + docker tag meshery:edge-latest meshery:edge-${GITHUB_SHA::7} + - name: Docker edge push + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() + run: | + docker push ${{ secrets.IMAGE_NAME }}:edge-latest + docker push ${{ secrets.IMAGE_NAME }}:edge-${GITHUB_REF/refs\/tags\//} + docker push ${{ secrets.IMAGE_NAME }}:edge-${GITHUB_SHA::7} + - name: Docker Hub Description + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() + uses: peter-evans/dockerhub-description@v2.0.0 + env: + DOCKERHUB_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKERHUB_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + DOCKERHUB_REPOSITORY: ${{ secrets.IMAGE_NAME }} \ No newline at end of file diff --git a/.github/workflows/pr-labeler.yml b/.github/workflows/pr-labeler.yml new file mode 100644 index 00000000000..0f364d88665 --- /dev/null +++ b/.github/workflows/pr-labeler.yml @@ -0,0 +1,24 @@ +name: Pull Request Labeler +on: + pull_request_target: + types: [opened] + paths: + - 'docs/**' + +jobs: + path-labeler: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v3 + with: + github-token: ${{secrets.GH_ACCESS_TOKEN}} + script: | + # Get pull request description + + # Add 'new submission' label + github.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['area/docs'] + }) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index a88e6d16d04..c834d6b7c70 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -11,8 +11,52 @@ jobs: runs-on: ubuntu-latest steps: # Drafts your next Release notes as Pull Requests are merged into "master" - - uses: release-drafter/release-drafter@v5 + - name: Drafting release + id: release_drafter + uses: release-drafter/release-drafter@v5 with: config-name: release-drafter.yml env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.RELEASEDRAFTER_PAT }} + + - name: Checkout release notes + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() + uses: actions/checkout@v2 + + - name: Write release notes to markdown file + id: md_writer + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() + run: | + printf '%b\n' "---\nlayout: release\ndate: $(date +'%Y-m-%d')\ntag: ${{ steps.release_drafter.outputs.tag_name }}\n---\n\n${{ steps.release_drafter.outputs.body }} " > ./docs/_releases/${{ steps.release_drafter.outputs.tag_name }}.md + + - name: Create Pull Request + id: cpr + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() + uses: peter-evans/create-pull-request@v3 + with: + token: ${{ secrets.RELEASE_NOTES_PAT }} + commit-message: "Created release note file ${{ steps.release_drafter.outputs.tag_name }}.md" + committer: l5io + author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> + signoff: true + branch: docs/automated-release-notes + delete-branch: true + title: '[Docs] Release Notes for Meshery ${{ steps.release_drafter.outputs.tag_name }}' + body: | + An auto-generated pull request to document release notes for Meshery ${{ steps.release_drafter.outputs.tag_name }} + labels: | + area/ci + kind/chore + # assignees: + # reviewers: + team-reviewers: | + release-team + maintainers + # milestone: 1 + draft: false + + - name: Verify PR + if: github.event_name != 'pull_request' && startsWith(github.ref, 'refs/tags/') && success() + run: | + echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" diff --git a/.github/workflows/slack.yml b/.github/workflows/slack.yml index 734e75cd410..af52b6f8e59 100644 --- a/.github/workflows/slack.yml +++ b/.github/workflows/slack.yml @@ -7,10 +7,10 @@ jobs: steps: - name: Get current star count run: | - echo ::set-env name=STARS::$(curl --silent 'https://api.github.com/repos/layer5io/meshery' -H 'Accept: application/vnd.github.preview' | jq '.watchers_count') + echo "STARS=$(curl --silent 'https://api.github.com/repos/layer5io/meshery' -H 'Accept: application/vnd.github.preview' | jq '.stargazers_count')" >> $GITHUB_ENV - name: Notify slack env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} uses: pullreminders/slack-action@master with: - args: '{\"channel\":\"CSK7N9TGX\",\"text\":\"Someone just starred Meshery! (https://github.com/layer5io/meshery/stargazers) Total ⭐️: ${{env.STARS}}\"}' \ No newline at end of file + args: '{\"channel\":\"CSK7N9TGX\",\"text\":\"Someone just starred Meshery! (https://github.com/layer5io/meshery/stargazers) Total ⭐️: ${{env.STARS}}\"}' diff --git a/.gitignore b/.gitignore index 9988b46b5e0..d4a3cc4480a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ -# Meshery +# mesheryctl mesheryctl/cmd/mesheryctl/mesheryctl mesheryctl/.meshery/ mesheryctl/mesheryctl +mesheryctl/default.profraw main # Binaries for programs and plugins @@ -21,8 +22,6 @@ main .vscode/ -config - *.config Chart.min.js @@ -48,12 +47,12 @@ dist/ */npm-debug.log -Gemfile.lock - **/.idea -docs/Gemfile.lock yarn.lock # Generated binaries -**/bin \ No newline at end of file +**/bin +*.Identifier + +default.profraw \ No newline at end of file diff --git a/.goreleaser.yml b/.goreleaser.yml index 2b86eb4022e..e40065b3b42 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -18,6 +18,7 @@ builds: ldflags: - -s -w -X github.com/layer5io/meshery/mesheryctl/internal/cli/root.version={{.Version}} - -s -w -X github.com/layer5io/meshery/mesheryctl/internal/cli/root.commitsha={{.Commit}} + - -s -w -X github.com/layer5io/meshery/mesheryctl/internal/cli/root.releasechannel={{.Env.RELEASE_CHANNEL}} # GOOS list to build for. # For more info refer to: https://golang.org/doc/install/source#environment # Defaults are darwin and linux. @@ -77,7 +78,7 @@ brews: # same kind. We will probably unify this in the next major version like it is done with scoop. # Github repository to push the tap to. - github: + tap: owner: layer5io name: homebrew-tap @@ -111,7 +112,7 @@ brews: # If set to auto, the release will not be uploaded to the homebrew tap # in case there is an indicator for prerelease in the tag e.g. v1.0.0-rc1 # Default is false. - skip_upload: auto + skip_upload: false # Custom block for brew. # Can be used to specify alternate downloads for devel or head releases. diff --git a/ADOPTERS.md b/ADOPTERS.md index 0aac8c5d96f..0bfa011fc0c 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -1,9 +1,11 @@ -- [HPE Labs- Cloudless](https://www.labs.hpe.com/page/cloudless) - - "Our Complex, Dynamic, and Intelligent system demands leverage different tools to efficiently manage service exchange and ecosystem at Global Scale; for instance, we need to identify right fit Service Mesh to address varying workload scenarios, distributed systems across locations, different security tiers, minimal latency etc. Meshery helps us curate Service Mesh for tailored need by helping us running simulations and identifying the right fit Service Mesh that works efficiently across diverse ecosystem of tools." -- [Intraserve Systems](http://intraservesystems.com) - - [Mohsen Houshmand](https://twitter.com/houshym): "Working with service mesh technology, I find one of the most useful tools is Meshery! I use Meshery to run POCs for our customers to help them adopt, and then, ongoing to check our mesh configuration. The most fantastic part about Meshery is it's performance management features." -- [SolarWinds](https://solarwinds.com) -- Sudeep Batra ([Ericsson](https://www.ericsson.com)) - ---- -If you're using Meshery and aren't on this list, please [submit a pull request](https://github.com/layer5io/meshery/pulls)! +- [HPE Labs- Cloudless](https://www.labs.hpe.com/page/cloudless) + - "Our Complex, Dynamic, and Intelligent system demands leverage different tools to efficiently manage service exchange and ecosystem at Global Scale; for instance, we need to identify right fit Service Mesh to address varying workload scenarios, distributed systems across locations, different security tiers, minimal latency etc. Meshery helps us curate Service Mesh for tailored need by helping us running simulations and identifying the right fit Service Mesh that works efficiently across diverse ecosystem of tools." +- [Intraserve Systems](http://intraservesystems.com) + - [Mohsen Houshmand](https://twitter.com/houshym): "Working with service mesh technology, I find one of the most useful tools is Meshery! I use Meshery to run POCs for our customers to help them adopt, and then, ongoing to check our mesh configuration. The most fantastic part about Meshery is it's performance management features." +- [SolarWinds](https://solarwinds.com) +- Sudeep Batra ([Ericsson](https://www.ericsson.com)) +- [Metabob](https://metabob.com) + - [Sako WS](https://twitter.com/sakows): "We find Meshery to be the perfect to tool to help us successfully operate our service mesh. And with so many new features coming out, it's only getter better and better." + +--- +If you're using Meshery and aren't on this list, please [submit a pull request](https://github.com/layer5io/meshery/pulls)! diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..8c9500b345c --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.meshery.io diff --git a/CODEOWNERS b/CODEOWNERS index 04c25d68ca5..2a876fd00ba 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,2 +1,3 @@ -@girishranganathan @leecalcote +@kumarabd +@girishranganathan diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c4b6c12c576..9490207e5c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -90,10 +90,10 @@ Practices for Production Environments](https://peter.bourgon.org/go-in-productio ### Prerequisites for building Meshery in your development environment: -1. `Go` version 1.11+ installed if you want to build and/or make changes to the existing code. +1. `Go` version 1.15+ installed if you want to build and/or make changes to the existing code. 1. `GOPATH` environment variable should be configured appropriately 1. `npm` and `node` should be installed on your machine, preferably the latest versions. -1. Fork this repository (`git clone https://github.com/layer5io/meshery.git`), clone your forked version of Meshery to your local, preferably outside `GOPATH`. If you happen to checkout Meshery inside your `GOPATH` and you have a version of `Go` prior to version 1.13, please set an environment variable `GO111MODULE=on` to enable GO Modules. +1. Fork this repository (`git clone https://github.com/layer5io/meshery.git`), clone your forked version of Meshery to your local, preferably outside `GOPATH`. #### Build and run Meshery server @@ -115,7 +115,7 @@ To build & run the Meshery server code, run the following command: make run-local ``` -Any time changes are made to the GO code, you will have to stop the server and run the above command again. +Any time changes are made to the Go code, you will have to stop the server and run the above command again. Once the Meshery server is up and running, you should be able to access Meshery on your `localhost` on port `9081` at `http://localhost:9081`. To access the [Meshery UI Development Server](#ui-development-server) on port `3000`, you will need to select your **Cloud Provider** by navigating to `localhost:9081` after running the Meshery server. @@ -157,6 +157,17 @@ Meshery uses adapters to provision and interact with different service meshes. F _Tip:_ The [Meshery adapter for Istio](https://github.com/layer5io/meshery-istio) is a good reference adapter to use as an example of a Meshery adapter written in Go. +#### Running Meshery Adapter (Meshery-Istio) +**Meshery-Istio** is a pre-written example of Meshery Adapter written in Go. Follow these instuctions to run meshery-istio to avoid errors related to Meshery Adapters + +1. Fork [Meshery-Istio](https://github.com/layer5io/meshery-istio) +2. Clone your fork locally +3. Run this command from the root directory of **meshery-istio** + ```sh + make run + ``` +4. Try connecting to port 10000 as Meshery Adapter URL + ## UI Contribution Flow Meshery is written in `Go` (Golang) and leverages Go Modules. UI is built on React, Billboard.js and Next.js. To make building and packaging easier a `Makefile` is included in the main repository folder. @@ -198,7 +209,7 @@ Any UI changes made now will automatically be recompiled and served in the brows If you want to run Meshery from IDE like Goland, VSCode. set below environment variable ``` -SAAS_BASE_URL=https://meshery.layer5.io +PROVIDER_BASE_URLS="https://meshery.layer5.io" PORT=9081 DEBUG=true ADAPTER_URLS=mesherylocal.layer5.io:10000 mesherylocal.layer5.io:10001 mesherylocal.layer5.io:10002 mesherylocal.layer5.io:10003 mesherylocal.layer5.io:10004 mesherylocal.layer5.io:10005 mesherylocal.layer5.io:10006 mesherylocal.layer5.io:10007 mesherylocal.layer5.io:10008 mesherylocal.layer5.io:10009 diff --git a/Dockerfile b/Dockerfile index cd9a7566474..05f97691595 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,40 +1,48 @@ -FROM golang:1.13.6 as meshery-server -ARG TOKEN -ARG GIT_VERSION -ARG GIT_COMMITSHA - -RUN adduser --disabled-login appuser -WORKDIR /github.com/layer5io/meshery -ADD . . -RUN cd cmd; GOPROXY=direct GOSUMDB=off go build -ldflags="-w -s -X main.globalTokenForAnonymousResults=$TOKEN -X main.version=$GIT_VERSION -X main.commitsha=$GIT_COMMITSHA" -tags draft -a -o /meshery . - -FROM node as ui -ADD ui ui -RUN cd ui; npm install --only=production; npm run build && npm run export; mv out / - -FROM node as provider-ui -ADD provider-ui provider-ui -RUN cd provider-ui; npm install --only=production; npm run build && npm run export; mv out / - -FROM ubuntu as wrk2 -RUN apt-get -y update && apt-get -y install git && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man/?? /usr/share/man/??_* -RUN apt-get -y update && apt-get -y install build-essential libssl-dev git zlib1g-dev -RUN git config --global user.email "meshery@layer5.io" -RUN git config --global user.name "meshery" -RUN git clone --depth=1 https://github.com/layer5io/wrk2 && cd wrk2 && make - -# FROM alpine -# RUN apk --update add ca-certificates -# RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 -FROM ubuntu -RUN apt-get update; apt-get install -y ca-certificates; update-ca-certificates -COPY --from=meshery-server /meshery /app/cmd/ -COPY --from=meshery-server /etc/passwd /etc/passwd -COPY --from=ui /out /app/ui/out -COPY --from=provider-ui /out /app/provider-ui/out -COPY --from=wrk2 /wrk2 /app/cmd/wrk2 -COPY --from=wrk2 /wrk2/wrk /usr/local/bin -RUN mkdir -p /home/appuser/.meshery/config; chown -R appuser /home/appuser/ -USER appuser -WORKDIR /app/cmd -CMD ./meshery +FROM golang:1.13.6 as meshery-server +ARG TOKEN +ARG GIT_VERSION +ARG GIT_COMMITSHA +ARG RELEASE_CHANNEL + +RUN adduser --disabled-login appuser +WORKDIR /github.com/layer5io/meshery +ADD . . +RUN rm go.sum; go clean -modcache; cd cmd; GOPROXY=https://proxy.golang.org GOSUMDB=off go build -ldflags="-w -s -X main.globalTokenForAnonymousResults=$TOKEN -X main.version=$GIT_VERSION -X main.commitsha=$GIT_COMMITSHA -X main.releasechannel=$RELEASE_CHANNEL" -tags draft -a -o /meshery . + +FROM node as ui +ADD ui ui +RUN cd ui; npm install --only=production; npm run build && npm run export; mv out / + +FROM node as provider-ui +ADD provider-ui provider-ui +RUN cd provider-ui; npm install --only=production; npm run build && npm run export; mv out / + +FROM ubuntu as wrk2 +RUN apt-get -y update && apt-get -y install git && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man/?? /usr/share/man/??_* +RUN apt-get -y update && apt-get -y install build-essential libssl-dev git zlib1g-dev +RUN git config --global user.email "meshery@layer5.io" +RUN git config --global user.name "meshery" +RUN git clone --depth=1 https://github.com/layer5io/wrk2 && cd wrk2 && make + +FROM ubuntu as nighthawk +RUN apt-get -y update && apt-get -y install git && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man/?? /usr/share/man/??_* +RUN apt-get -y update && apt-get -y install build-essential libssl-dev git zlib1g-dev +RUN git config --global user.email "meshery@layer5.io" +RUN git config --global user.name "meshery" +RUN git clone https://github.com/layer5io/nighthawk-go +RUN cd nighthawk-go/apinighthawk/bin && chmod +x ./nighthawk_client + +FROM ubuntu +RUN apt-get update; apt-get install -y ca-certificates; update-ca-certificates +COPY ./oam /app/oam +COPY --from=meshery-server /meshery /app/cmd/ +COPY --from=meshery-server /etc/passwd /etc/passwd +COPY --from=ui /out /app/ui/out +COPY --from=provider-ui /out /app/provider-ui/out +COPY --from=wrk2 /wrk2 /app/cmd/wrk2 +COPY --from=wrk2 /wrk2/wrk /usr/local/bin +COPY --from=nighthawk /nighthawk-go/apinighthawk/bin /usr/local/bin +RUN mkdir -p /home/appuser/.meshery/config; chown -R appuser /home/appuser/ +USER appuser +WORKDIR /app/cmd +CMD ./meshery diff --git a/Makefile b/Makefile index bcde7027034..f37256b4b69 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,12 @@ -ADAPTER_URLS := "mesherylocal.layer5.io:10000 mesherylocal.layer5.io:10001 mesherylocal.layer5.io:10002 mesherylocal.layer5.io:10003 mesherylocal.layer5.io:10004 mesherylocal.layer5.io:10008 mesherylocal.layer5.io:10009" +ADAPTER_URLS := "mesherylocal.layer5.io:10000 mesherylocal.layer5.io:10001 mesherylocal.layer5.io:10002 mesherylocal.layer5.io:10003 mesherylocal.layer5.io:10004 mesherylocal.layer5.io:10006 mesherylocal.layer5.io:10008 mesherylocal.layer5.io:10009" -MESHERY_CLOUD_LOCAL=http://mesherylocal.layer5.io:9876 -MESHERY_CLOUD_DEV=http://localhost:9876 -MESHERY_CLOUD_PROD=https://meshery.layer5.io -MESHERY_CLOUD_STAGING=https://staging-meshery.layer5.io +MESHERY_CLOUD_LOCAL="http://mesherylocal.layer5.io:9876" +MESHERY_CLOUD_DEV="http://localhost:9876" +MESHERY_CLOUD_PROD="https://meshery.layer5.io" +MESHERY_CLOUD_STAGING="https://staging-meshery.layer5.io" GIT_VERSION=$(shell git describe --tags `git rev-list --tags --max-count=1`) GIT_COMMITSHA=$(shell git rev-list -1 HEAD) +RELEASE_CHANNEL="edge" # Build the CLI for Meshery - `mesheryctl`. # Build Meshery inside of a multi-stage Docker container. @@ -16,7 +17,7 @@ mesheryctl: # `make docker` builds Meshery inside of a multi-stage Docker container. # This method does NOT require that you have Go, NPM, etc. installed locally. docker: - DOCKER_BUILDKIT=1 docker build -t layer5/meshery --build-arg TOKEN=$(GLOBAL_TOKEN) --build-arg GIT_COMMITSHA=$(GIT_COMMITSHA) --build-arg GIT_VERSION=$(GIT_VERSION) . + DOCKER_BUILDKIT=1 docker build -t layer5/meshery --build-arg TOKEN=$(GLOBAL_TOKEN) --build-arg GIT_COMMITSHA=$(GIT_COMMITSHA) --build-arg GIT_VERSION=$(GIT_VERSION) --build-arg RELEASE_CHANNEL=${RELEASE_CHANNEL} . # Runs Meshery in a container locally and points to locally-running # Meshery Cloud for user authentication. @@ -24,7 +25,7 @@ docker-run-local-cloud: (docker rm -f meshery) || true docker run --name meshery -d \ --link meshery-cloud:meshery-cloud \ - -e SAAS_BASE_URL=$(MESHERY_CLOUD_LOCAL) \ + -e PROVIDER_BASE_URLS=$(MESHERY_CLOUD_LOCAL) \ -e DEBUG=true \ -e ADAPTER_URLS=$(ADAPTER_URLS) \ -p 9081:8080 \ @@ -35,7 +36,7 @@ docker-run-local-cloud: docker-run-cloud: (docker rm -f meshery) || true docker run --name meshery -d \ - -e SAAS_BASE_URL=$(MESHERY_CLOUD_PROD) \ + -e PROVIDER_BASE_URLS=$(MESHERY_CLOUD_PROD) \ -e DEBUG=true \ -e ADAPTER_URLS=$(ADAPTER_URLS) \ -v meshery-config:/home/appuser/.meshery/config \ @@ -48,8 +49,8 @@ docker-run-cloud: run-local-cloud: cd cmd; go clean; rm meshery; go mod tidy; \ - go build -ldflags="-w -s -X main.version=${GIT_VERSION} -X main.commitsha=${GIT_COMMITSHA}" -tags draft -a -o meshery; \ - SAAS_BASE_URL=$(MESHERY_CLOUD_DEV) \ + go build -ldflags="-w -s -X main.version=${GIT_VERSION} -X main.commitsha=${GIT_COMMITSHA} -X main.releasechannel=${RELEASE_CHANNEL}" -tags draft -a -o meshery; \ + PROVIDER_BASE_URLS=$(MESHERY_CLOUD_DEV) \ PORT=9081 \ DEBUG=true \ ADAPTER_URLS=$(ADAPTER_URLS) \ @@ -60,14 +61,31 @@ run-local-cloud: # and points to remote Meshery Cloud for user authentication. run-local: cd cmd; go clean; rm meshery; go mod tidy; \ - go build -ldflags="-w -s -X main.version=${GIT_VERSION} -X main.commitsha=${GIT_COMMITSHA}" -tags draft -a -o meshery; \ - SAAS_BASE_URL=$(MESHERY_CLOUD_PROD) \ + go build -ldflags="-w -s -X main.version=${GIT_VERSION} -X main.commitsha=${GIT_COMMITSHA} -X main.releasechannel=${RELEASE_CHANNEL}" -tags draft -a -o meshery; \ + PROVIDER_BASE_URLS=$(MESHERY_CLOUD_PROD) \ PORT=9081 \ DEBUG=true \ ADAPTER_URLS=$(ADAPTER_URLS) \ ./meshery; \ cd .. +run-fast: + cd cmd; go mod tidy; \ + PROVIDER_BASE_URLS=$(MESHERY_CLOUD_PROD) \ + PORT=9081 \ + DEBUG=true \ + ADAPTER_URLS=$(ADAPTER_URLS) \ + go run main.go; + +run-fast-cloud: + cd cmd; go mod tidy; \ + PROVIDER_BASE_URLS=$(MESHERY_CLOUD_DEV) \ + PORT=9081 \ + DEBUG=true \ + ADAPTER_URLS=$(ADAPTER_URLS) \ + go run main.go; + + golangci-run: GO111MODULE=off GOPROXY=direct GOSUMDB=off go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.30.0; $(GOPATH)/bin/golangci-lint run @@ -130,3 +148,6 @@ docker-docs: docker run --name meshery-docs --rm -p 4000:4000 -v `pwd`:"/srv/jekyll" jekyll/jekyll:3.8.5 bash -c "bundle install; jekyll serve --drafts --livereload" +.PHONY: chart-readme +chart-readme: + go run github.com/norwoodj/helm-docs/cmd/helm-docs -c install/kubernetes/helm/ \ No newline at end of file diff --git a/README.md b/README.md index 3d81e96c533..fc78cff8313 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -



+



[![Docker Pulls](https://img.shields.io/docker/pulls/layer5/meshery.svg)](https://hub.docker.com/r/layer5/meshery) [![Go Report Card](https://goreportcard.com/badge/github.com/layer5io/meshery)](https://goreportcard.com/report/github.com/layer5io/meshery) @@ -20,26 +20,26 @@ See the [getting started](https://meshery.io/#getting-started) section to quickl | Platform | Supported? | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------: | -| [Docker](https://meshery.layer5.io/docs/installation/platforms/docker) | βœ”οΈ | -|     [Docker - Docker App](https://meshery.layer5.io/docs/installation/platforms/docker) | βœ”οΈ | -| [Kubernetes](https://meshery.layer5.io/docs/installation/platforms/kubernetes) | βœ”οΈ | -|     [Kubernetes - AKS](https://meshery.layer5.io/docs/installation/platforms/aks) | βœ”οΈ | -|     [Kubernetes - Docker Desktop](https://meshery.layer5.io/docs/installation#mac-or-linux) | βœ”οΈ | -|     [Kubernetes - EKS](https://meshery.layer5.io/docs/installation/platforms/eks) | βœ”οΈ | -|     [Kubernetes - GKE](https://meshery.layer5.io/docs/installation/platforms/gke) | βœ”οΈ | -|     [Kubernetes - Helm](https://meshery.layer5.io/docs/installation/platforms/kubernetes#using-helm) | βœ”οΈ | -|     [Kubernetes - kind](https://meshery.layer5.io/docs/installation/platforms/kind) | βœ”οΈ | -|     [Kubernetes - Minikube](https://meshery.layer5.io/docs/installation/platforms/minikube) | βœ”οΈ | -|     Kubernetes - OpenShift | In Progress | -| [Linux](https://meshery.layer5.io/docs/installation#mac-or-linux) | βœ”οΈ | -| [Mac](https://meshery.layer5.io/docs/installation#mac-or-linux) | βœ”οΈ | -|     [Mac - Homebrew](https://meshery.layer5.io/docs/installation#mac-or-linux) | βœ”οΈ | -| [Windows](https://meshery.layer5.io/docs/installation#windows) | βœ”οΈ | -|     [Scoop](https://meshery.layer5.io/docs/installation#windows) | βœ”οΈ | -|     [WSL2](https://meshery.layer5.io/docs/installation/platforms/wsl2) | βœ”οΈ | -| Raspberry Pi | In Progress | - -[Meshery documentation](https://meshery.layer5.io/docs/installation) offers thorough installation guides for your platform of choice. +| [Docker](https://docs.meshery.io/installation/platforms/docker) | βœ”οΈ | +|     [Docker - Docker App](https://docs.meshery.io/installation/platforms/docker) | βœ”οΈ | +| [Kubernetes](https://docs.meshery.io/installation/platforms/kubernetes) | βœ”οΈ | +|     [Kubernetes - AKS](https://docs.meshery.io/installation/platforms/aks) | βœ”οΈ | +|     [Kubernetes - Docker Desktop](https://docs.meshery.io/installation#mac-or-linux) | βœ”οΈ | +|     [Kubernetes - EKS](https://docs.meshery.io/installation/platforms/eks) | βœ”οΈ | +|     [Kubernetes - GKE](https://docs.meshery.io/installation/platforms/gke) | βœ”οΈ | +|     [Kubernetes - Helm](https://docs.meshery.io/installation/platforms/kubernetes#using-helm) | βœ”οΈ | +|     [Kubernetes - kind](https://docs.meshery.io/installation/platforms/kind) | βœ”οΈ | +|     [Kubernetes - Minikube](https://docs.meshery.io/installation/platforms/minikube) | βœ”οΈ | +|     Kubernetes - OpenShift | In Progress | +| [Linux](https://docs.meshery.io/installation#mac-or-linux) | βœ”οΈ | +| [Mac](https://docs.meshery.io/installation#mac-or-linux) | βœ”οΈ | +|     [Mac - Homebrew](https://docs.meshery.io/installation#mac-or-linux) | βœ”οΈ | +| [Windows](https://docs.meshery.io/installation#windows) | βœ”οΈ | +|     [Scoop](https://docs.meshery.io/installation#windows) | βœ”οΈ | +|     [WSL2](https://docs.meshery.io/installation/platforms/windows#wsl2) | βœ”οΈ | +| Raspberry Pi | In Progress | + +[Meshery documentation](https://docs.meshery.io/installation) offers thorough installation guides for your platform of choice. ## Supported Service Meshes @@ -53,67 +53,74 @@ See the [getting started](https://meshery.io/#getting-started) section to quickl - stable + stable - Istio Service Mesh adapter Meshery adapter for Istio + Meshery Adapter for Istio Service Mesh Meshery adapter for Istio - Linkerd Meshery adapter for Linkerd + Linkerd Meshery adapter for Linkerd - Consul Connect Meshery adapter for Consul + Consul Connect Meshery adapter for Consul - Octarine Service MeshMeshery adapter for Octarine + Octarine Service MeshMeshery adapter for Octarine - Network MeshMeshery adapter for Network Service Mesh - - - - - beta - - Citrix CPX Service MeshMeshery adapter for Citrix CPX + Network MeshMeshery adapter for Network Service Mesh - Kuma Service MeshMeshery adapter for Kuma + Kuma Service MeshMeshery adapter for Kuma - Open Service MeshMeshery adapter for Open Service Mesh + Open Service MeshMeshery adapter for Open Service Mesh - + - alpha + beta + + + + Citrix CPX Service MeshMeshery adapter for Citrix CPX + - - Traefik Service MeshMeshery adapter for Traefik Mesh + + Traefik Service MeshMeshery adapter for Traefik Mesh - + + + NGINX Service MeshMeshery adapter for Nginx Service Mesh + + + + + alpha + + - Tanzu Service MeshMeshery adapter for Tanzu SM + Tanzu Service MeshMeshery adapter for Tanzu SM - AWS App Mesh Service MeshMeshery adapter for App Mesh + AWS App Mesh Service MeshMeshery adapter for App Mesh @@ -125,7 +132,7 @@ See the [getting started](https://meshery.io/#getting-started) section to quickl ## Functionality

-Layer5 Service Mesh Management +Layer5 Service Mesh Management

Service Mesh Lifecycle Management

Meshery manages the provisioning, configuration and operation your service mesh. While supporting different types of service meshes, Meshery also offers a simple way to explore each service mesh and compare them using bundled sample applications. @@ -135,23 +142,23 @@ Interoperate multiple service meshes with service mesh adapters provision, confi

-Layer5 Service Mesh Configuration Management +Layer5 Service Mesh Configuration Management +


Service Mesh Configuration Management

Assess your service mesh configuration against deployment and operational best practices with Meshery's configuration validator. - Onboard your workload onto the service mesh with confidence. Check your service mesh configuration for anti-patterns and avoid common pitfalls.



Adhering to Service Mesh Standards

- -In an effort to produce service mesh agnostic tooling, Meshery uses the [service mesh performance](https://smp-spec.io/) as a common format to capture and measure your mesh's performance against a universal service mesh performance index. As a partner of VMware's Multi-Vendor Service Mesh Interoperation (Hamlet) and Service Mesh Interface (SMI), Meshery participates in advancing service mesh adoption through the standardization of APIs. +Service Mesh Performance (SMP) +In an effort to produce service mesh agnostic tooling, Meshery uses the [service mesh performance](https://smp-spec.io) as a common format to capture and measure your mesh's performance against a universal service mesh performance index. As a partner of VMware's Multi-Vendor Service Mesh Interoperation (Hamlet) and Service Mesh Interface (SMI), Meshery participates in advancing service mesh adoption through the standardization of APIs.

-Layer5 Service Mesh Performance Management - +Layer5 Service Mesh Performance Management +

Standardized Service Performance Management

Meshery is the service-mesh-neutral utility for uniformly managing the performance of services and the meshes that run them. As an implementation of the Service Mesh Performance ([SMP](https://layer5.io/performance)), Meshery enables you to measure the value provided by a service mesh in the context of the overhead incurred. @@ -163,7 +170,7 @@ Meshery is the service-mesh-neutral utility for uniformly managing the performan

-Meshery provides tooling to validate any service mesh that claims to implement and SMI Validation, Verification, and Conformance with Mesheryconform to SMI specifications. Working in accordance with the [SMI Conformance project](https://layer5.io/projects/service-mesh-interface), it essentially provides: +Meshery provides tooling to validate any service mesh that claims to implement and SMI Validation, Verification, and Conformance with Mesheryconform to SMI specifications. Working in accordance with the [SMI Conformance project](https://layer5.io/projects/service-mesh-interface), it essentially provides: βœ”οΈŽ Defines compliant behavior.
βœ”οΈŽ Produces compatibility matrix.
@@ -182,8 +189,8 @@ Meshery provides tooling to validate any service mesh that claims to implement a You may deploy Meshery internal to your cluster or external to your cluster. -

-Learn more about Meshery's architecture. +

+Learn more about Meshery's architecture.
 
@@ -193,7 +200,7 @@ Learn more about Meshery's Our projects are community-built and welcome collaboration. πŸ‘ Be sure to see the Layer5 Community Welcome Guide for a tour of resources available to you and see the Layer5 Repository Overview for a cursory description of repository by technology and programming language. Jump into community Slack to engage!

-MeshMates +MeshMates

Find your MeshMate

MeshMates are experienced Layer5 community members, who will help you learn your way around, discover live projects, and expand your community network. @@ -204,9 +211,9 @@ Find out more on the Layer5 commu

-Layer5 Service Mesh Community +Layer5 Service Mesh Community -Layer5 Service Mesh Community +Layer5 Service Mesh Community

βœ”οΈ Join any or all of the weekly meetings on community calendar.
@@ -227,7 +234,7 @@ We're a warm and welcoming community of open source contributors. Please join. A - [Write an adapter](CONTRIBUTING.md/#adapter) - [Build the project](CONTRIBUTING.md/#building) -Deploying Linkerd with Meshery +Deploying Linkerd with Meshery

 
@@ -240,7 +247,7 @@ We're a warm and welcoming community of open source contributors. Please join. A - [Cloud Native Rejekts EU 2019](https://cfp.cloud-native.rejekts.io/cloud-native-rejekts-eu-2019/speaker/GZQTEM/) | [deck](https://calcotestudios.com/talks/decks/slides-cloud-native-rejekts-2019-evaluating-service-meshes.html) - [DockerCon 2019 Open Source Summit](https://dockercon19.smarteventscloud.com/connect/sessionDetail.ww?SESSION_ID=309149&tclass=popup#.XJxH-TOcbjI.twitter) | [deck](https://calcotestudios.com/talks/decks/slides-dockercon-2019-establishing-an-open-source-office.html), [video](https://www.docker.com/dockercon/2019-videos?watch=open-source-summit-service-mesh) - [Container World 2019](https://tmt.knect365.com/container-world/speakers/lee-calcote) | [deck](https://calcotestudios.com/talks/decks/slides-container-world-2019-service-meshes-but-at-what-cost.html) -- [Service Mesh Day](https://servicemeshday.com/schedule/) | [deck](https://docs.google.com/presentation/d/1HwG03okX3DHgGKbma4PL-MO7Xr9zDrjQgd05PRi9i8E/edit?usp=sharing), [video](https://youtu.be/CFj1O_uyhhs) +- [Service Mesh Day](https://servicemeshday.com/schedule.html) | [deck](https://docs.google.com/presentation/d/1HwG03okX3DHgGKbma4PL-MO7Xr9zDrjQgd05PRi9i8E/edit?usp=sharing), [video](https://youtu.be/CFj1O_uyhhs) - [Innotech San Antonio](https://innotechsanantonio2019.sched.com/event/Lmlb/the-enterprise-path-to-service-mesh-architectures?iframe=no&w=100%&sidebar=yes&bg=no) | [deck](https://calcotestudios.com/talks/decks/slides-innotech-san-antonio-2019-the-enterprise-path-to-service-mesh.html) - [CNCF Networking WG](https://github.com/cncf/wg-networking) | [deck](https://www.slideshare.net/leecalcote/benchmarking-service-meshes-cncf-networking-wg-141938576), [video](https://www.youtube.com/watch?v=2_JwCc-kLMA&list=PLYjO73_1efChX9NuRaU7WocTbgrfvCoPE) diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 00000000000..76bb3e56c5b --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,27 @@ +# Meshery Roadmap + +Milestones on Meshery's high-level roadmap- + +Milestone | Features +--- | --- +v0.6.0 |

performance profiles, patterns (crud)

  • Remote provider: meshmap
  • +v0.7.0 | workflow engine, environments and multi-cluster, wasm filters (crud) +v0.8.0 | extensible authorization, meshsync viewer +v0.9.0 |

    policy engine, configuration analysis

  • Remote provider: gitops
  • +v1.0.0 | hardening, release process, integration tests, user acceptance testing +v1.1.0 | distributed performance, notification center + +Refer the [Meshery Roadmap](https://docs.google.com/document/d/1kvcz8jdvFwXmYBBaY2-3fHHUUoy1GJLpZZXuoxZQoOk/edit#) document for detailed info. + +# mesheryctl Roadmap + +Milestones on mesheryctl's high-level roadmap- + +Milestone | Features +--- | --- +v0.6.0 |

    pervasive kubernetes support

  • Create `patterns`
  • Refactoring `perf` to support SMP better
  • Confirm support for Linux, Windows, and MacOS across all current commands
  • +v0.7.0 |

  • Create `mesh` (adapter operations)
  • Confirm support for environment and multi-cluster
  • +v0.8.0 |

    gRPC (streaming of status and events)

  • Colorizing output
  • +v0.9.0 | OAuth + +Refer the [Meshery Roadmap](https://docs.google.com/document/d/1kvcz8jdvFwXmYBBaY2-3fHHUUoy1GJLpZZXuoxZQoOk/edit#) document for detailed info. \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..c516504d8ba --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,65 @@ +# Security Policy +We are very grateful to the security researchers and users that report +back Meshery security vulnerabilities. We investigate every report thoroughly. + +## Reporting a vulnerability +To make a report, send an email to the private +[meshery-security-vulns-reports@meshery.dev](mailto:meshery-security-vulns-reports@meshery.dev) +mailing list with the vulnerability details. For normal product bugs +unrelated to latent security vulnerabilities, please head to +the appropriate repository and submit a [new issue](https://github.com/layer5io/meshery/issues/new/choose). + +### When to report a security vulnerability? + +Send us a report whenever you: + +- Think Meshery has a potential security vulnerability. +- Are unsure whether or how a vulnerability affects Meshery. +- Think a vulnerability is present in another project that Meshery +depends on (Docker for example). + +### When not to report a security vulnerability? + +Don't send a vulnerability report if: + +- You need help tuning Meshery components for security. +- You need help applying security related updates. +- Your issue is not security related. + +## Evaluation + +The Meshery team acknowledges and analyzes each vulnerability report within 10 working days. + +Any vulnerability information you share with the Meshery team stays +within the Meshery project. We don't disseminate the information to other +projects. We only share the information as needed to fix the issue. + +We keep the reporter updated as the status of the security issue is addressed. + +## Fixing the issue + +Once a security vulnerability has been fully characterized, a fix is developed by the Meshery team. +The development and testing for the fix happens in a private GitHub repository in order to prevent +premature disclosure of the vulnerability. + +## Early disclosure + +The Meshery project maintains a mailing list for private early disclosure of security vulnerabilities. +The list is used to provide actionable information to close Meshery partners. The list is not intended +for individuals to find out about security issues. + +## Public disclosure + +On the day chosen for public disclosure, a sequence of activities takes place as quickly as possible: + +- Changes are merged from the private GitHub repository holding the fix into the appropriate set of public +branches. +- Meshery team ensures all necessary binaries are promptly built and published. +- Once the binaries are available, an announcement is sent out on the following channels: + - The [Meshery blog](https://meshery.io/blog/) + - The [Meshery Twitter feed](https://twitter.com/mesheryio) + - The #announcements channel on Slack + +As much as possible this announcement will be actionable, and include any mitigating steps customers can take prior to +upgrading to a fixed version. + diff --git a/cmd/main.go b/cmd/main.go index 6b90f674bba..53a568e4370 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -2,17 +2,25 @@ package main import ( "context" + "fmt" "net/http" + "net/url" "os" "os/signal" "path" "time" - "github.com/layer5io/meshery/helpers" - "github.com/layer5io/meshery/handlers" + "github.com/layer5io/meshery/helpers" + "github.com/layer5io/meshery/internal/graphql" + "github.com/layer5io/meshery/internal/store" "github.com/layer5io/meshery/models" + "github.com/layer5io/meshery/models/oam" "github.com/layer5io/meshery/router" + "github.com/layer5io/meshkit/database" + "github.com/layer5io/meshkit/logger" + mesherykube "github.com/layer5io/meshkit/utils/kubernetes" + meshsyncmodel "github.com/layer5io/meshsync/pkg/model" "github.com/spf13/viper" "github.com/sirupsen/logrus" @@ -25,6 +33,12 @@ var ( globalTokenForAnonymousResults string version = "Not Set" commitsha = "Not Set" + releasechannel = "Not Set" +) + +const ( + // DefaultProviderURL is the provider url for the "none" provider + DefaultProviderURL = "https://meshery.layer5.io" ) func main() { @@ -32,6 +46,15 @@ func main() { models.GlobalTokenForAnonymousResults = globalTokenForAnonymousResults } + // Initialize Logger instance + log, err := logger.New("meshery", logger.Options{ + Format: logger.SyslogLogFormat, + }) + if err != nil { + logrus.Error(err) + os.Exit(1) + } + ctx := context.Background() viper.AutomaticEnv() @@ -40,6 +63,21 @@ func main() { viper.SetDefault("ADAPTER_URLS", "") viper.SetDefault("BUILD", version) viper.SetDefault("COMMITSHA", commitsha) + viper.SetDefault("RELEASE_CHANNEL", releasechannel) + + store.Initialize() + + // Register local OAM traits and workloads + if err := oam.RegisterMesheryOAMTraits(); err != nil { + logrus.Error(err) + } + if err := oam.RegisterMesheryOAMWorkloads(); err != nil { + logrus.Error(err) + } + logrus.Info("Registered Meshery local Capabilities") + + // Get the channel + logrus.Info("Meshery server current channel: ", releasechannel) home, err := os.UserHomeDir() if viper.GetString("USER_DATA_FOLDER") == "" { @@ -104,14 +142,44 @@ func main() { } defer testConfigPersister.CloseTestConfigsPersister() - saasBaseURL := viper.GetString("SAAS_BASE_URL") + dbHandler, err := database.New(database.Options{ + Filename: fmt.Sprintf("%s/meshsync.sql", viper.GetString("USER_DATA_FOLDER")), + Engine: database.SQLITE, + Logger: log, + }) + if err != nil { + logrus.Fatal(err) + } + + kubeclient := mesherykube.Client{} + meshsyncCh := make(chan struct{}) + + err = dbHandler.AutoMigrate( + meshsyncmodel.KeyValue{}, + meshsyncmodel.Object{}, + ) + if err != nil { + logrus.Fatal(err) + } + lProv := &models.DefaultLocalProvider{ - SaaSBaseURL: saasBaseURL, + ProviderBaseURL: DefaultProviderURL, MapPreferencePersister: preferencePersister, ResultPersister: resultPersister, SmiResultPersister: smiResultPersister, TestProfilesPersister: testConfigPersister, + GenericPersister: dbHandler, + GraphqlHandler: graphql.New(graphql.Options{ + Logger: log, + DBHandler: &dbHandler, + KubeClient: &kubeclient, + MeshSyncChannel: meshsyncCh, + }), + GraphqlPlayground: graphql.NewPlayground(graphql.Options{ + URL: "/api/system/graphql/query", + }), } + lProv.Initialize() provs[lProv.Name()] = lProv cPreferencePersister, err := models.NewBitCaskPreferencePersister(viper.GetString("USER_DATA_FOLDER")) @@ -120,21 +188,40 @@ func main() { } defer preferencePersister.ClosePersister() - if saasBaseURL == "" { - logrus.Fatalf("SAAS_BASE_URL environment variable not set.") - } - cp := &models.MesheryRemoteProvider{ - SaaSBaseURL: saasBaseURL, - RefCookieName: "meshery_ref", - SessionName: "meshery", - TokenStore: make(map[string]string), - LoginCookieDuration: 1 * time.Hour, - BitCaskPreferencePersister: cPreferencePersister, - ProviderVersion: "v0.3.14", + RemoteProviderURLs := viper.GetStringSlice("PROVIDER_BASE_URLS") + for _, providerurl := range RemoteProviderURLs { + parsedURL, err := url.Parse(providerurl) + if err != nil { + logrus.Error(providerurl, "is invalid url skipping provider") + continue + } + cp := &models.RemoteProvider{ + RemoteProviderURL: parsedURL.String(), + RefCookieName: parsedURL.Host + "_ref", + SessionName: parsedURL.Host, + TokenStore: make(map[string]string), + LoginCookieDuration: 1 * time.Hour, + BitCaskPreferencePersister: cPreferencePersister, + ProviderVersion: "v0.3.14", + SmiResultPersister: smiResultPersister, + GenericPersister: dbHandler, + GraphqlHandler: graphql.New(graphql.Options{ + Logger: log, + DBHandler: &dbHandler, + KubeClient: &kubeclient, + MeshSyncChannel: meshsyncCh, + }), + GraphqlPlayground: graphql.NewPlayground(graphql.Options{ + URL: "/api/system/graphql/query", + }), + } + + cp.Initialize() + + cp.SyncPreferences() + defer cp.StopSyncPreferences() + provs[cp.Name()] = cp } - cp.SyncPreferences() - defer cp.StopSyncPreferences() - provs[cp.Name()] = cp h := handlers.NewHandlerInstance(&models.HandlerConfig{ Providers: provs, @@ -153,7 +240,7 @@ func main() { PrometheusClient: models.NewPrometheusClient(), PrometheusClientForQuery: models.NewPrometheusClientWithHTTPClient(&http.Client{Timeout: time.Second}), - }) + }, &kubeclient, meshsyncCh, log) port := viper.GetInt("PORT") r := router.NewRouter(ctx, h, port) diff --git a/docker-compose.yaml b/docker-compose.yaml index 4f7340bc464..a255b7fb726 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -5,8 +5,9 @@ services: labels: - "com.centurylinklabs.watchtower.enable=true" environment: + - "PROVIDER_BASE_URLS=https://meshery.layer5.io" - "SAAS_BASE_URL=https://meshery.layer5.io" - - "ADAPTER_URLS=meshery-istio:10000 meshery-linkerd:10001 meshery-consul:10002 meshery-octarine:10003 meshery-nsm:10004 meshery-kuma:10007 meshery-cpx:10008 meshery-osm:10009" + - "ADAPTER_URLS=meshery-istio:10000 meshery-linkerd:10001 meshery-consul:10002 meshery-octarine:10003 meshery-nsm:10004 meshery-kuma:10007 meshery-cpx:10008 meshery-osm:10009 meshery-traefik-mesh:10006" - "EVENT=mesheryLocal" volumes: - $HOME/.kube:/home/appuser/.kube:ro @@ -42,6 +43,12 @@ services: - "com.centurylinklabs.watchtower.enable=true" ports: - "10004:10004" + meshery-traefik-mesh: + image: layer5/meshery-traefik-mesh:stable-latest + labels: + - "com.centurylinklabs.watchtower.enable=true" + ports: + - "10006:10006" meshery-kuma: image: layer5/meshery-kuma:stable-latest labels: @@ -60,7 +67,13 @@ services: - "com.centurylinklabs.watchtower.enable=true" ports: - "10009:10009" - # TODO(Kush) : Revamp the nighthawk image inclusion approach + #meshery-nginx-sm: + # image: layer5/meshery-nginx-sm:stable-latest + # labels: + # - "com.centurylinklabs.watchtower.enable=true" + # ports: + # - "10010:10010" + # TODO (kushthedude): Revamp the nighthawk image inclusion approach # nighthawk-lg: # image: envoyproxy/nighthawk-dev:latest watchtower: diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 00000000000..3a603cfae5d --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +docs.meshery.io \ No newline at end of file diff --git a/docs/Gemfile b/docs/Gemfile index 7c623b2818f..55b0510f10e 100644 --- a/docs/Gemfile +++ b/docs/Gemfile @@ -17,10 +17,8 @@ ruby '2.7.1' # If you want to use GitHub Pages, remove the "gem "jekyll"" above and # uncomment the line below. To upgrade, run `bundle update github-pages`. gem "github-pages", group: :jekyll_plugins -gem 'jemoji' # If you have any plugins, put them here! -# group :jekyll_plugins do -# gem "jekyll-github-metadata", "~> 1.0" -# end - +#group :jekyll_plugins do + # gem "jemoji" +#end diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock new file mode 100644 index 00000000000..40283b64c25 --- /dev/null +++ b/docs/Gemfile.lock @@ -0,0 +1,268 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (6.0.3.4) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + zeitwerk (~> 2.2, >= 2.2.2) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.17.13) + ruby-enum (~> 0.5) + concurrent-ruby (1.1.7) + dnsruby (1.61.5) + simpleidn (~> 0.1) + em-websocket (0.5.2) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + ethon (0.12.0) + ffi (>= 1.3.0) + eventmachine (1.2.7) + execjs (2.7.0) + faraday (1.3.0) + faraday-net_http (~> 1.0) + multipart-post (>= 1.2, < 3) + ruby2_keywords + faraday-net_http (1.0.0) + ffi (1.14.2) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (209) + github-pages-health-check (= 1.16.1) + jekyll (= 3.9.0) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.1.6) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.2) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.6.1) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.1.1) + jekyll-theme-cayman (= 0.1.1) + jekyll-theme-dinky (= 0.1.1) + jekyll-theme-hacker (= 0.1.2) + jekyll-theme-leap-day (= 0.1.1) + jekyll-theme-merlot (= 0.1.1) + jekyll-theme-midnight (= 0.1.1) + jekyll-theme-minimal (= 0.1.1) + jekyll-theme-modernist (= 0.1.1) + jekyll-theme-primer (= 0.5.4) + jekyll-theme-slate (= 0.1.1) + jekyll-theme-tactile (= 0.1.1) + jekyll-theme-time-machine (= 0.1.1) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.0) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.3) + mercenary (~> 0.3) + minima (= 2.5.1) + nokogiri (>= 1.10.4, < 2.0) + rouge (= 3.23.0) + terminal-table (~> 1.4) + github-pages-health-check (1.16.1) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (~> 3.0) + typhoeus (~> 1.3) + html-pipeline (2.14.0) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.9.0) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.3.1) + commonmarker (~> 0.14) + jekyll (>= 3.7, < 5.0) + jekyll-commonmark-ghpages (0.1.6) + commonmarker (~> 0.17.6) + jekyll-commonmark (~> 1.2) + rouge (>= 2.0, < 4.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) + octokit (~> 4.0, != 4.4.0) + jekyll-mentions (1.6.0) + html-pipeline (~> 2.3) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.2) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.1.2) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.5.4) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.3) + listen (3.4.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + mini_portile2 (2.5.0) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.14.3) + multipart-post (2.1.1) + nokogiri (1.11.1) + mini_portile2 (~> 2.5.0) + racc (~> 1.4) + octokit (4.20.0) + faraday (>= 0.9) + sawyer (~> 0.8.0, >= 0.5.3) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (3.1.1) + racc (1.5.2) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.4) + rouge (3.23.0) + ruby-enum (0.8.0) + i18n + ruby2_keywords (0.0.2) + rubyzip (2.3.0) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.8.2) + addressable (>= 2.3.5) + faraday (> 0.8, < 2.0) + simpleidn (0.1.1) + unf (~> 0.1.4) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (1.2.9) + thread_safe (~> 0.1) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.7) + unicode-display_width (1.7.0) + zeitwerk (2.4.2) + +PLATFORMS + ruby + +DEPENDENCIES + github-pages + +RUBY VERSION + ruby 2.7.1p83 + +BUNDLED WITH + 2.2.9 diff --git a/docs/Makefile b/docs/Makefile index e7076921931..3db745b3ca3 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,10 +1,13 @@ jekyll=bundle exec jekyll -site: - $(jekyll) serve --drafts --livereload +site: install + $(jekyll) serve --drafts --livereload --config _config.yml,_config_dev.yml -build: +build: install $(jekyll) build --drafts +install: + bundle install + docker: - docker run --name meshery-docs --rm -p 4000:4000 -v `pwd`:"/srv/jekyll" jekyll/jekyll:3.8.7 bash -c "bundle install; jekyll serve --drafts --livereload" + docker run --name meshery-docs --rm -p 4000:4000 -v `pwd`:"/srv/jekyll" jekyll/jekyll:3.8.7 bash -c "bundle install; jekyll serve --drafts --livereload --config _config.yml,_config_dev.yml" \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index bb8d77f33c7..b52c5b2915c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,7 +1,7 @@ # Meshery Docs ![assets/img/docs-screenshot.png](assets/img/docs-screenshot.png) -*Check out the [Meshery Docs](https://meshery.layer5.io/docs/)!* +*Check out the [Meshery Docs](https://docs.meshery.io/)!* ## Contributing to the Meshery Documentation @@ -40,7 +40,7 @@ Before contributing, please review the [Documentation Contribution Flow](https:/ ```bash $ make site ``` - *Note: From the Makefile, this command is actually running `$ bundle exec jekyll serve --drafts --livereload`. There are two Jekyll configuration, `jekyll serve` for developing locally and `jekyll build` when you need to generate the site artefacts for production.* + *Note: From the Makefile, this command is actually running `$ bundle exec jekyll serve --drafts --livereload`. There are two Jekyll configuration, `jekyll serve` for developing locally and `jekyll build` when you need to generate the site artifacts for production.* ### 4. Create a Pull Request diff --git a/docs/_adapters/app-mesh.md b/docs/_adapters/app-mesh.md index eb0839d150e..eb5bb0215f6 100644 --- a/docs/_adapters/app-mesh.md +++ b/docs/_adapters/app-mesh.md @@ -1,20 +1,21 @@ --- -layout: page -title: App Mesh Adapter +layout: default +title: Meshery Adapter for App Mesh name: Meshery Adapter for App Mesh mesh_name: App Mesh version: v0.1.0 port: 10005/tcp project_status: alpha github_link: https://github.com/layer5io/meshery-app-mesh -image: /docs/assets/img/service-meshes/aws-app-mesh.png +image: /assets/img/service-meshes/app-mesh.svg +permalink: service-meshes/adapters/app-mesh --- -# {{ page.name }} +{% include adapter-status.html %} -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | +The {{ page.name }} is currently under construction ({{ page.project_status }} state), which means that the adapter is not functional and cannot be interacted with through the Meshery UI at the moment. Check back here to see updates. + +Want to contribute? Check our [progress]({{page.github_link}}). ### Lifecycle management diff --git a/docs/_adapters/consul.md b/docs/_adapters/consul.md deleted file mode 100644 index 276605f6e45..00000000000 --- a/docs/_adapters/consul.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -layout: page -title: Consul Adapter -name: Meshery Adapter for Consul -mesh_name: Consul -version: v1.8.2 -port: 10002/tcp -project_status: stable -github_link: https://github.com/layer5io/meshery-consul -image: /docs/assets/img/service-meshes/consul.svg ---- -# {{ page.name }} - -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | - -### Lifecycle management - -The {{page.name}} can install **{{page.version}}** of the {{page.mesh_name}} service mesh. A number of sample applications for {{page.mesh_name}} can also be installed using Meshery. - -### Features - -1. Lifecycle management of {{page.mesh_name}} -1. Lifecycle management of sample applications -1. Performance management of {{page.mesh_name}} and it workloads - - Prometheus and Grafana integration -1. Configuration management and best practices of {{page.mesh_name}} -1. Custom service mesh configuration - -### Sample Applications - -The {{ page.name }} includes a handful of sample applications. Use Meshery to deploy any of these sample applications. - -- [httpbin](https://httpbin.org) - - Httpbin is a simple HTTP request and response service. -- [Istio BookInfo](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md#what-is-the-bookinfo-application) - - This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. -- [Image Hub](https://github.com/layer5io/image-hub) - - Image Hub is a sample application written to run on Consul for exploring WebAssembly modules used as Envoy filters. - -![Layer5 Image Hub on HashiCorp Consul](/docs/service-meshes/adapters/consul/layer5-image-hub-on-hashicorp-consul.png) - - -### Performance management of Consul and it workloads - -#### Prometheus and Grafana integration - -The {{ page.name }} will connect to {{ page.name }}'s Prometheus and Grafana instances running in the control plane (typically found in a separate namespace) or other instances to which Meshery has network reachability. - -### Architecture - -![Consul Service Mesh Archicture](/docs/service-meshes/adapters/consul/service-mesh-architecture-consul.png) - -### Suggested Topics - -- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. -- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). diff --git a/docs/_adapters/consul/consul.md b/docs/_adapters/consul/consul.md new file mode 100644 index 00000000000..44db461f657 --- /dev/null +++ b/docs/_adapters/consul/consul.md @@ -0,0 +1,74 @@ +--- +layout: default +title: Meshery Adapter for Consul +name: Meshery Adapter for Consul +mesh_name: Consul +version: v1.8.2 +port: 10002/tcp +project_status: stable +lab: consul-meshery-adapter +github_link: https://github.com/layer5io/meshery-consul +image: /assets/img/service-meshes/consul.svg +#redirect_from: service-meshes/adapters/consul +permalink: service-meshes/adapters/consul +--- +{% include adapter-status.html %} + +{% include adapter-labs.html %} + +## Lifecycle management + +The {{page.name}} can install **{{page.version}}** of the {{page.mesh_name}} service mesh. + +### Install {{ page.mesh_name }} + +##### Choose the Meshery Adapter for {{page.mesh_name}} + + + + + +##### Click on (+) and choose the {{page.version}} of the {{page.mesh_name}} service mesh. + + + + + +A number of [sample applications](#sample-applications) for {{page.mesh_name}} can also be installed using Meshery. + +### Features + +1. Lifecycle management of {{page.mesh_name}} +1. Lifecycle management of sample applications +1. Performance management of {{page.mesh_name}} and it workloads + - Prometheus and Grafana integration +1. Configuration management and best practices of {{page.mesh_name}} +1. Custom service mesh configuration + +### Sample Applications + +Meshery supports the deployment of a variety of sample applications on {{ page.name }}. Use Meshery to deploy any of these sample applications. + +- [httpbin]({{ site.baseurl }}/guides/sample-apps#httpbin) + - Httpbin is a simple HTTP request and response service. +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - The sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. +- [Image Hub]({{ site.baseurl }}/guides/sample-apps/imagehub) + - Image Hub is a sample application written to run on Consul for exploring WebAssembly modules used as Envoy filters. + +[![Layer5 Image Hub on HashiCorp Consul]({{ site.baseurl }}/service-meshes/adapters/consul/layer5-image-hub-on-hashicorp-consul.png)]({{ site.baseurl }}/service-meshes/adapters/consul/layer5-image-hub-on-hashicorp-consul.png) + +### Performance management of Consul and it workloads + +#### Prometheus and Grafana integration + +The {{ page.name }} will connect to {{ page.name }}'s Prometheus and Grafana instances running in the control plane (typically found in a separate namespace) or other instances to which Meshery has network reachability. + +### Architecture + +[![Consul Service Mesh Archicture]({{ site.baseurl }}/service-meshes/adapters/consul/service-mesh-architecture-consul.png)]({{ site.baseurl }}/service-meshes/adapters/consul/service-mesh-architecture-consul.png) + +### Suggested Topics + +- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. +- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). diff --git a/docs/_adapters/cpx.md b/docs/_adapters/cpx.md index f52c07e832d..b2edf6bdc6e 100644 --- a/docs/_adapters/cpx.md +++ b/docs/_adapters/cpx.md @@ -1,42 +1,49 @@ --- -layout: page -title: Citrix Service Mesh (CPX) Adapter +layout: default +title: Citrix Service Mesh (CPX) name: Meshery Adapter for Citrix Service Mesh -mesh_name: Citrix Service Mesh +mesh_name: Citrix version: "1.0" port: 10008/tcp project_status: beta github_link: https://github.com/layer5io/meshery-cpx -image: /docs/assets/img/service-meshes/cpx.png +image: /assets/img/service-meshes/citrix.svg --- -# {{ page.name }} +{% include adapter-status.html %} -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :-------------------------------------------------: | :---------------------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | +## Lifecycle management +The {{page.name}} can install **{{page.version}}** of the {{page.mesh_name}}. + +### Install {{ page.mesh_name }} + +##### Choose the Meshery Adapter for Citrix + + + + + +##### Click on (+) and choose the {{page.version}} of the {{page.mesh_name}} service mesh. + + + + ## Features 1. Lifecycle Management of {{page.mesh_name}} 2. Lifecycle Management of Sample Applications -### Lifecycle management -The {{page.name}} can install **{{page.version}}** of the {{page.mesh_name}}. - ### Sample Applications The {{ page.name }} includes a handful of sample applications. Some of these applications are from other service meshes and some of these sample applications are general-purpose examples. Use Meshery to deploy any of these sample applications. -- [hipster](https://github.com/GoogleCloudPlatform/microservices-demo) - - - Hipster Shop Application is a web-based, e-commerce demo application from the Google Cloud Platform. - -- [httpbin](https://httpbin.org) - - Httpbin is a simple HTTP request and response service. - -- [Istio BookInfo Application](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md#what-is-the-bookinfo-application) - - This application is a polyglot composition of microservices that are written in different languages. The application displays information about a book, similar to a single catalog entry of an online book store. Displayed on the page is a description of the book, book details (ISBN, number of pages, and so on), and a few book reviews. +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - Follow this [tutorial workshop](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md) to set up and deploy the BookInfo sample app on Istio using Meshery. +- [Httpbin]({{ site.baseurl }}/guides/sample-apps#httpbin) + - Httpbin is a simple HTTP request and response service. +- [Hipster]({{ site.baseurl }}/guides/sample-apps#hipster) + - Hipster Shop Application is a web-based, e-commerce demo application from the Google Cloud Platform. ### Suggested Topics diff --git a/docs/_adapters/istio/istio.md b/docs/_adapters/istio/istio.md index f2e0d8570c5..081374ad4ce 100644 --- a/docs/_adapters/istio/istio.md +++ b/docs/_adapters/istio/istio.md @@ -1,59 +1,93 @@ --- -layout: page -title: Istio +layout: default +title: Meshery Adapter for Istio name: Meshery Adapter for Istio -version: v1.5 +version: v1.8.1 +mesh_name: Istio port: 10000/tcp project_status: stable +lab: istio-meshery-adapter github_link: https://github.com/layer5io/meshery-istio -image: /docs/assets/img/service-meshes/istio.svg +image: /assets/img/service-meshes/istio.svg +permalink: service-meshes/adapters/istio --- -# {{ page.name }} -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | +{% include adapter-status.html %} -### Features -1. Lifecycle management of Istio -1. Lifecycle management of sample applications -1. SMI Conformance Capability of Istio -1. Configuration best practices -1. Custom service mesh configuration -1. Prometheus and Grafana connections +{% include adapter-labs.html %} + +## Features + +1. {{page.mesh_name}} Lifecycle Management +1. Workload Lifecycle Management + 1. Using Service Mesh Standards + 1. Service Mesh Performance (SMP) + 1. Prometheus and Grafana connections + 1. Service Mesh Interface (SMI) +1. Configuration Analysis, Patterns, and Best Practices + 1. Custom Service Mesh Configuration ### Lifecycle management -The {{page.name}} can install **{{page.version}}** of the {{page.name}} service mesh. The SMI adapter for Istio can also be installed using Meshery. +The {{page.name}} can install {{page.version}} of the {{page.title}} service mesh. The SMI adapter for Istio can also be installed using Meshery. + +### Install {{ page.mesh_name }} + +In Meshery's UI, choose the Meshery Adapter for {{ page.mesh_name }}. + + + + + +Click on (+) and choose the {{page.version}} of the {{page.mesh_name}} service mesh. + + + + + + +### Workload Management + +The ({{page.name}}) includes a handful of sample applications. Use Meshery to deploy any of these sample applications: -### Sample applications +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - Follow this [tutorial workshop](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md) to set up and deploy the BookInfo sample app on Istio using Meshery. -The ({{ page.name }}) includes a handful of sample applications. Use Meshery to deploy any of these sample applications: +- [Httpbin]({{ site.baseurl }}/guides/sample-apps#httpbin) + - Httpbin is a simple HTTP request and response service. -- [Bookinfo](https://github.com/istio/istio/tree/master/samples/bookinfo) -- [Httpbin](https://httpbin.org/) -- [Hipster](https://github.com/GoogleCloudPlatform/microservices-demo) +- [Hipster]({{ site.baseurl }}/guides/sample-apps#hipster) + - Hipster Shop Application is a web-based, e-commerce demo application from the Google Cloud Platform. -Once BookInfo is deployed, you can use Meshery to apply configuration to control traffic, inject latency, perform context-based routing, and so on. +## Using Service Mesh Standards -### SMI Conformance Capability +### Complying with Service Mesh Interface (SMI) Meshery allows you to analyze the compliance status and functional capabilities of your service mesh. This allows you to compare high-level functional differences between service meshes and verify whether your service mesh is conformant with the SMI specification. -Learn more about the SMI specification and [Meshery's conformance test suite](https://meshery.layer5.io/docs/functionality/smi-conformance). +Learn more about the SMI specification and [Meshery's conformance test suite]({{ site.baseurl }}/functionality/service-mesh-interface). + +### Managing Service Mesh Performance (SMP) + +### Prometheus and Grafana connections + +The {{page.name}} will connect to Istio's Prometheus and Grafana instances running in the control plane (typically found in the `istio-system` namespace). You can also connect Meshery to Prometheus and Grafana instances not running in the service mesh's control plane. +## Configuration Analysis, Patterns, and Best Practices ### Configuration best practices + The {{page.name}} will parse all of Istio's configuration and compare the running configuration of the service mesh against known best practices for an {{page.title}} deployment. ### Custom service mesh configuration Meshery allows you to paste (or type in) any Kubernetes manifest that you would like to have applied to the cluster. This configuraiton may be new VirtualServices or new DestinationRules or other. - ![Custom Istio Configuration in Meshery]({{ relative_url }}istio-adapter-custom-configuration.png) - -### Prometheus and Grafana connections - -The {{page.name}} will connect to Istio's Prometheus and Grafana instances running in the control plane (typically found in the `istio-system` namespace). You can also connect Meshery to Prometheus and Grafana instances not running in the service mesh's control plane. + + + + + + ### Suggested Topics diff --git a/docs/_adapters/kuma.md b/docs/_adapters/kuma.md deleted file mode 100644 index fbd4e814f7e..00000000000 --- a/docs/_adapters/kuma.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: page -title: Kuma Adapter -name: Meshery Adapter for Kuma -version: v1.0 -port: 10007/tcp -project_status: beta -github_link: https://github.com/layer5io/meshery-kuma -image: /docs/assets/img/service-meshes/kuma.svg ---- - -# {{ page.name }} - -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :-------------------------------------------------: | :---------------------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | - -### Features - -1. Lifecycle management of Kuma -1. SMI Conformance Capability of Kuma - -### Lifecycle management - -The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. - -### SMI Conformance Capability - -Meshery allows you to analyze the compliance status and functional capabilities of your service mesh. This allows you to compare high-level functional differences between service meshes and verify whether your service mesh is conformant with the SMI specification. - -Learn more about the SMI specification and [Meshery's conformance test suite](https://meshery.layer5.io/docs/functionality/smi-conformance). diff --git a/docs/_adapters/kuma/kuma.md b/docs/_adapters/kuma/kuma.md new file mode 100644 index 00000000000..1394da096bb --- /dev/null +++ b/docs/_adapters/kuma/kuma.md @@ -0,0 +1,49 @@ +--- +layout: page +title: Meshery Adapter for Kuma +name: Meshery Adapter for Kuma +mesh_name: Kuma +version: v1.0 +port: 10007/tcp +project_status: beta +lab: kuma-meshery-adapter +github_link: https://github.com/layer5io/meshery-kuma +image: /assets/img/service-meshes/kuma.svg +permalink: service-meshes/adapters/kuma +--- + +{% include adapter-status.html %} + +{% include adapter-labs.html %} + +## Lifecycle management + +The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. + +### Install {{ page.mesh_name }} +Choose the Meshery Adapter for {{ page.mesh_name }}. + + + + + +Click on (+) and choose the {{page.version}} of the {{page.mesh_name}} service mesh. + + + + + + +## Workload Management + +The following sample applications are available in this adapter. + +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - The sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. + +### SMI Conformance Capability + +Meshery allows you to analyze the compliance status and functional capabilities of your service mesh. This allows you to compare high-level functional differences between service meshes and verify whether your service mesh is conformant with the SMI specification. + +Learn more about the SMI specification and [Meshery's conformance test suite]({{ site.baseurl }}/functionality/service-mesh-interface). + diff --git a/docs/_adapters/linkerd.md b/docs/_adapters/linkerd.md index 280252f439c..50fddf35148 100644 --- a/docs/_adapters/linkerd.md +++ b/docs/_adapters/linkerd.md @@ -1,43 +1,60 @@ --- -layout: page -title: Linkerd Adapter +layout: default +title: Meshery Adapter for Linkerd name: Meshery Adapter for Linkerd mesh_name: Linkerd version: v2.5.0 port: 10001/tcp project_status: stable +lab: linkerd-meshery-adapter github_link: https://github.com/layer5io/meshery-linkerd -image: /docs/assets/img/service-meshes/linkerd.svg +image: /assets/img/service-meshes/linkerd.svg +permalink: service-meshes/adapters/linkerd --- -# {{ page.name }} +{% include adapter-status.html %} -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | - -### Lifecycle management - -The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. +{% include adapter-labs.html %} ### Features 1. Lifecycle management of {{page.mesh_name}} 1. Lifecycle management of sample applications 1. Performance testing + +## Lifecycle management + +The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. + +### Install {{ page.mesh_name }} + +Note: Linkerd's control plane will be deployed to the `linkerd` namespace. Linkerd does not support deployments of its control plane into namespaces under a different name. +##### Choose the Meshery Adapter for {{ page.mesh_name }} + + + + + + +##### Click on (+) and choose the {{page.version}} of the {{page.mesh_name}} service mesh. + + + + + ### Sample Applications -The {{ page.name }} includes a handful of sample applications. Use Meshery to deploy any of these sample applications. +The {{ page.name }} includes the ability to deploy a variety of sample applications. Use Meshery to deploy any of these sample applications: -- [Emojivoto](https://github.com/BuoyantIO/emojivoto) +- [Emojivoto]({{ site.baseurl }}/guides/sample-apps#emoji.voto) - A microservice application that allows users to vote for their favorite emoji, and tracks votes received on a leaderboard. -- [Istio Bookinfo](https://github.com/istio/istio/tree/master/samples/bookinfo) - - This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - The sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. -- [Linkerd Books](https://github.com/BuoyantIO/booksapp) - - Application that helps you manage your bookshelf. +- [Linkerd Books]({{ site.baseurl }}/guides/sample-apps#linkerdbooks) + - A sample application built for demonstrating manage your bookshelf. -- [HTTPbin](https://httpbin.org/) +- [HTTPbin]({{ site.baseurl }}/guides/sample-apps#httpbin) - A simple HTTP Request & Response Service. Identify overhead involved in running {{page.mesh_name}}, various {{page.mesh_name}} configurations while running different workloads and on different infrastructure. The adapter facilitates data plane and control plane performance testing. @@ -45,4 +62,4 @@ Identify overhead involved in running {{page.mesh_name}}, various {{page.mesh_na 1. Prometheus integration 1. Grafana integration -The [Meshery adapter for Linkerd]({{ page.github_link }}) will connect to Linkerd's Prometheus and Grafana instances running in the control plane. +The [Meshery Adapter for Linkerd]({{ page.github_link }}) will connect to Linkerd's Prometheus and Grafana instances running in the control plane. diff --git a/docs/_adapters/maesh.md b/docs/_adapters/maesh.md deleted file mode 100644 index 05e2dcff1c1..00000000000 --- a/docs/_adapters/maesh.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: page -title: Traefik Mesh Adapter -name: Meshery Adapter for Traefik Mesh -mesh_name: Traefik Mesh -version: v1.0 -port: 10006/tcp -project_status: alpha -github_link: https://github.com/layer5io/meshery-maesh -image: /docs/assets/img/service-meshes/traefik.svg ---- -# {{ page.name }} - -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | - -### Lifecycle management - -The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. - -### Suggested Topics - -- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. -- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). - -### Sample Applications - -The {{ page.name }} includes some sample applications operations. Meshery can be used to deploy any of these sample applications. - -- [Istio BookInfo](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md#what-is-the-bookinfo-application) - - This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. -- [httpbin](https://httpbin.org) - - This is a simple HTTP Request & Response Service. diff --git a/docs/_adapters/nginx-sm.md b/docs/_adapters/nginx-sm.md new file mode 100644 index 00000000000..69a7dcd9a94 --- /dev/null +++ b/docs/_adapters/nginx-sm.md @@ -0,0 +1,47 @@ +--- +layout: default +title: Meshery Adapter for NGINX Service Mesh +name: Meshery Adapter for NGINX Service Mesh +mesh_name: NGINX Service Mesh +version: v0.6.0 +port: 10010/tcp +project_status: beta +github_link: https://github.com/layer5io/meshery-nginx-sm +image: /assets/img/service-meshes/nginx-sm.svg +permalink: service-meshes/adapters/nginx-sm +--- +{% include adapter-status.html %} + +The {{ page.name }} is currently under construction ({{ page.project_status }} state). Want to contribute? Check our [progress](page.github_link). + +## Lifecycle management + +The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. + +### Features +1. Lifecycle management of {{page.mesh_name}} +1. Lifecycle management of sample applications +1. Performance testing + +### Sample Applications + +The {{ page.name }} includes a handful of sample applications. Use Meshery to deploy any of these sample applications. + +- [Emojivoto]({{ site.baseurl }}/guides/sample-apps#emoji.voto) + - A microservice application that allows users to vote for their favorite emoji, and tracks votes received on a leaderboard. + +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - Follow this [tutorial workshop](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md) to set up and deploy the BookInfo sample app on Istio using Meshery. + +- [Httpbin]({{ site.baseurl }}/guides/sample-apps#httpbin) + - Httpbin is a simple HTTP request and response service. + +- [Nginx Servce Mesh Books](https://github.com/BuoyantIO/booksapp) + - Application that helps you manage your bookshelf. + +Identify overhead involved in running {{page.mesh_name}}, various {{page.mesh_name}} configurations while running different workloads and on different infrastructure. The adapter facilitates data plane and control plane performance testing. + +1. Prometheus integration +1. Grafana integration + +The [{{page.name}}]({{ page.github_link }}) will connect to NGINX Service Mesh's Prometheus and Grafana instances running in the control plane. diff --git a/docs/_adapters/nsm/nsm.md b/docs/_adapters/nsm/nsm.md index 9c984be84a1..693b1dc0a7b 100644 --- a/docs/_adapters/nsm/nsm.md +++ b/docs/_adapters/nsm/nsm.md @@ -1,30 +1,44 @@ --- -layout: page -title: Network Service Mesh Adapter +layout: default +title: Meshery Adapter for Network Service Mesh name: Meshery Adapter for Network Service Mesh mesh_name: Network Service Mesh version: v0.2.1 port: 10004/tcp project_status: stable +lab: nsm-meshery-adapter github_link: https://github.com/layer5io/meshery-nsm -image: /docs/assets/img/service-meshes/nsm.svg +image: /assets/img/service-meshes/nsm.svg +permalink: service-meshes/adapters/nsm --- -# {{ page.name }} +{% include adapter-status.html %} -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :-----------------------------------------------------------------------------: | :---------------------------: | -| {{page.title}} | {{ page.project_status }} | {{page.version}} | +{% include adapter-labs.html %} -### Lifecycle management of {{ page.name }} +## Lifecycle management of {{ page.name }} -The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. +The {{page.name}} can install {{page.version}} of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. -### Lifecycle management of sample applications +### Install {{ page.mesh_name }} + +##### Choose the Meshery Adapter for {{ page.mesh_name }} + + + + + +Click on (+) and choose the {{page.version}} of the {{page.mesh_name}} service mesh. + + + + + +## Sample Applications The ({{ page.name }}) includes a handful of sample applications. These applications represent different network services orchestrated by {{page.mesh_name}}. Use Meshery to deploy any of these sample applications: -#### 1. **Hello NSM Application** +### 1. Hello NSM Application Watch this presentation to see the Hello NSM Application in-action: @@ -32,7 +46,7 @@ Watch this presentation to see the Hello NSM Application in-action: See on YouTube: [Adopting Network Service Mesh with Meshery](https://www.youtube.com/watch?v=4xKixsDTtdM&list=PL3A-A6hPO2IOpTbdH89qR-4AE0ON13Zie) -#### 2. **VPP-ICMP Application** +#### 2. VPP-ICMP Application _A simple example that connects a vpp based Pod to a Network Service using memif._ @@ -43,14 +57,14 @@ The icmp responder example does this with kernel interfaces. The vpp-icmp-respon ![vpp-icmp-responder-example](./vpp-icmp-responder-example.svg) -**Working process** +Working process This will install two Deployments: | Name | Description | | :------------------------- | :--------------------------- | -| **vpp-icmp-responder-nsc** | The Clients (four replicas) | -| **vpp-icmp-responder-nse** | The Endpoints (two replicas) | +| vpp-icmp-responder-nsc | The Clients (four replicas) | +| vpp-icmp-responder-nse | The Endpoints (two replicas) | And cause each Client to get a vWire connecting it to one of the Endpoints. Network Service Mesh handles the Network Service Discovery and Routing, as well as the vWire 'Connection Handling' for setting all of this up. @@ -58,34 +72,38 @@ And cause each Client to get a vWire connecting it to one of the Endpoints. Netw In order to make this case more interesting, Endpoint1 and Endpoint2 are deployed on two separate Nodes using PodAntiAffinity, so that the Network Service Mesh has to demonstrate the ability to string vWires between Clients and Endpoints on the same Node and Clients and Endpoints on different Nodes. -**Verification** +Verification First verify that the vpp-icmp-responder example Pods are all up and running: -```bash -kubectl get pods | grep vpp-icmp-responder -``` +
    + 
    + $ kubectl get pods | grep vpp-icmp-responder +
    +
    To see the vpp-icmp-responder example in action, you can run: -```bash -curl -s https://raw.githubusercontent.com/networkservicemesh/networkservicemesh/master/scripts/nsc_ping_all.sh | bash -``` +
    + 
    + $ curl -s https://raw.githubusercontent.com/networkservicemesh/networkservicemesh/master/scripts/nsc_ping_all.sh | bash +
    +
    -#### 3. **ICMP Responder** +#### 3. ICMP Responder The simplest possible case for Network Service Mesh is to have is connecting a Client via a vWire to another Pod that is providing a Network Service. We call this case the β€˜icmp-responder’ example, because it allows the client to ping the IP address of the Endpoint over the vWire. ![icmp-responder-example](./icmp-responder-example.svg) -**Outcomes** +Outcomes This will install two Deployments: | Name | Description | | :--------------------- | :-------------------------- | -| **icmp-responder-nsc** | The Clients, four replicas | -| **icmp-responder-nse** | The Endpoints, two replicas | +| icmp-responder-nsc | The Clients, four replicas | +| icmp-responder-nse | The Endpoints, two replicas | And cause each Client to get a vWire connecting it to one of the Endpoints. Network Service Mesh handles the Network Service Discovery and Routing, as well as the vWire 'Connection Handling' for setting all of this up. @@ -93,22 +111,26 @@ Network Service Discovery and Routing, as well as the vWire 'Connection Handling ![icmp-responder-example-2](./icmp-responder-example-2.svg) In order to make this case more interesting, Endpoint1 and Endpoint2 are deployed on two separate Nodes using -`PodAntiAffinity`, so that the Network Service Mesh has to demonstrate the ability to string vWires between Clients and +*PodAntiAffinity*, so that the Network Service Mesh has to demonstrate the ability to string vWires between Clients and Endpoints on the same Node and Clients and Endpoints on different Nodes. -**Verification** +Verification 1. Verify that the icmp-responder example Pods are all up and running: -```bash -kubectl get pods | grep icmp-responder -``` +
    + 
    + $ kubectl get pods | grep icmp-responder +
    +
    2. To see the icmp-responder example in action, you may run: -```bash -curl -s https://raw.githubusercontent.com/networkservicemesh/networkservicemesh/master/scripts/nsc_ping_all.sh | bash -``` +
    + 
    + $ curl -s https://raw.githubusercontent.com/networkservicemesh/networkservicemesh/master/scripts/nsc_ping_all.sh | bash +
    +
    ### Suggested Topics diff --git a/docs/_adapters/octarine/octarine.md b/docs/_adapters/octarine/octarine.md index be81b309d3f..3c0a71d7c0c 100644 --- a/docs/_adapters/octarine/octarine.md +++ b/docs/_adapters/octarine/octarine.md @@ -1,24 +1,35 @@ --- -layout: page -title: Octarine Adapter +layout: default +title: Octarine name: Meshery Adapter for Octarine mesh_name: Octarine version: v1.0 port: 10003/tcp project_status: stable github_link: https://github.com/layer5io/meshery-octarine -image: /docs/assets/img/service-meshes/octarine.svg +image: /assets/img/service-meshes/octarine.svg +permalink: service-meshes/adapters/octarine --- -# {{ page.name }} +{% include adapter-status.html %} -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | - -### Lifecycle Management +## Lifecycle Management The {{page.name}} can install **{{page.version}}** of the {{page.mesh_name}} service mesh. A number of sample applications for {{page.mesh_name}} can also be installed using Meshery. +### Install {{ page.mesh_name }} + +##### **Choose the Meshery Adapter for {{ page.mesh_name }}** + + + + + +##### **Click on (+) and choose the {{page.version}} of the {{page.mesh_name}} service mesh.** + + + + + ### Features 1. Policy-based validation that k8s workloads spec are secure. @@ -51,20 +62,20 @@ Once the Octarine's data plane services are deployed, the adapter can be used to #### Control Plane -![Alt text](./octarine_cparch.jpg?raw=true "Octarine Control Plane") +[![Octarine Control Plane](./octarine_cparch.jpg?raw=true)](./octarine_cparch.jpg?raw=true) #### Data Plane -![Alt text](./octarine_dparch.jpg?raw=true "Octarine Data Plane") - -### Suggested Topics - -- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. -- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). +[![Octarine Data Plane](./octarine_dparch.jpg?raw=true)](./octarine_dparch.jpg?raw=true) ### Sample Applications The {{ page.name }} includes the below sample application operation. Meshery can be use to deploy this sample application. -- [Istio BookInfo](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md#what-is-the-bookinfo-application) - - This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - The sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. + +### Suggested Topics + +- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. +- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). diff --git a/docs/_adapters/osm.md b/docs/_adapters/osm.md deleted file mode 100644 index 725edce6fe5..00000000000 --- a/docs/_adapters/osm.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -layout: page -title: Open Service Mesh Adapter -name: Meshery Adapter for Open Service Mesh -mesh_name: Open Service Mesh -version: OSM v0.3.0 -port: 10009/tcp -project_status: alpha -github_link: https://github.com/layer5io/meshery-osm -image: /docs/assets/img/service-meshes/osm.svg ---- - -# {{ page.name }} - -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :-------------------------------------------------: | :---------------------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | - -### Lifecycle management - -The {{page.name}} can install **{{page.version}}** of the {{page.mesh_name}} service mesh. Sample applications for {{page.mesh_name}} can also be installed using Meshery. Using the {{page.name}}, you may also run the complete suite of Service Mesh Interface (SMI) conformance tests to validate OSM’s compliance with the SMI specification. - -### SMI Conformance Capabiliy - -Meshery allows you to analyze the compliance status and functional capabilities of your service mesh. This allows you to compare high-level functional differences between service meshes and verify whether your service mesh is conformant with the SMI specification. - -Learn more about the SMI specification and [Meshery's conformance test suite](https://meshery.layer5.io/docs/functionality/smi-conformance). - -### Suggested Topics - -- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. -- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). - diff --git a/docs/_adapters/osm/osm.md b/docs/_adapters/osm/osm.md new file mode 100644 index 00000000000..789674cede3 --- /dev/null +++ b/docs/_adapters/osm/osm.md @@ -0,0 +1,55 @@ +--- +layout: default +title: Meshery Adapter for Open Service Mesh +name: Meshery Adapter for Open Service Mesh +mesh_name: Open Service Mesh +version: v0.5.0 +port: 10009/tcp +project_status: stable +github_link: https://github.com/layer5io/meshery-osm +image: /assets/img/service-meshes/osm.svg +permalink: service-meshes/adapters/osm +--- + +{% include adapter-status.html %} + +## Lifecycle management + +The {{page.name}} can install **{{page.version}}** of the {{page.mesh_name}} service mesh. Sample applications for {{page.mesh_name}} can also be installed using Meshery. Using the {{page.name}}, you may also run the complete suite of Service Mesh Interface (SMI) conformance tests to validate OSM’s compliance with the SMI specification. + +### Install {{ page.mesh_name }} + +Choose the Meshery Adapter for {{ page.mesh_name }}. + + + + + +Click on (+) and choose the `{{page.version}}` of the {{page.mesh_name}} service mesh. + + + + + +## Using Service Mesh Standards + +### Complying with Service Mesh Interface (SMI) + +Meshery allows you to analyze the compliance status and functional capabilities of your service mesh. This allows you to compare high-level functional differences between service meshes and verify whether your service mesh is conformant with the SMI specification. + +Learn more about the SMI specification and [Meshery's conformance test suite]({{ site.baseurl }}/functionality/service-mesh-interface). +### Managing Service Mesh Performance (SMP) + +### Prometheus and Grafana connections + +The {{page.name}} will connect to Open Service Mesh's Prometheus and Grafana instances running in the control plane (typically found in the `osm-system` namespace). You can also connect Meshery to Prometheus and Grafana instances not running in the service mesh's control plane. + +### Sample Applications + +The {{ page.name }} does not support Sample Applications yet. + +### Suggested Topics + +- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. +- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). + diff --git a/docs/_adapters/sofamesh.md b/docs/_adapters/sofamesh.md index 3c8326d951d..6a5947d116e 100644 --- a/docs/_adapters/sofamesh.md +++ b/docs/_adapters/sofamesh.md @@ -1,14 +1,11 @@ --- -layout: page -title: SOFAmesh Adapter +layout: default +title: SOFAmesh name: Meshery Adapter for SOFAmesh +project_status: visibility: hidden --- -# {{ page.name }} - -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | +{% include adapter-status.html %} ### Lifecycle management diff --git a/docs/_adapters/tanzu-sm.md b/docs/_adapters/tanzu-sm.md index 65ba5874287..4825d602264 100644 --- a/docs/_adapters/tanzu-sm.md +++ b/docs/_adapters/tanzu-sm.md @@ -1,33 +1,38 @@ --- -layout: page -title: Tanzu Service Mesh Adapter -name: Meshery adapter for Tanzu Service Mesh +layout: default +title: Meshery Adapter for Tanzu Service Mesh +name: Meshery Adapter for Tanzu Service Mesh mesh_name: Tanzu Service Mesh version: pre-GA port: 10010/tcp project_status: alpha github_link: https://github.com/layer5io/meshery-tanzu-sm -image: /docs/assets/img/service-meshes/tanzu.png +image: /assets/img/service-meshes/tanzu.svg +permalink: service-meshes/adapters/tanzu-sm --- -# {{ page.name }} -| Service Mesh | Adapter Status | Latest Supported Mesh Version | -| :------------: | :------------: | :------------: | -| {{page.title}} | [{{ page.project_status }}]({{ page.github_link }}) | {{page.version}} | +{% include adapter-status.html %} +## Features -### Lifecycle management - -The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications for {{page.mesh_name}} can also be installed using Meshery. +1. {{page.mesh_name}} Lifecycle Management +1. Workload Lifecycle Management + 1. Using Service Mesh Standards + 1. Service Mesh Performance (SMP) + 1. Prometheus and Grafana connections + 1. Service Mesh Interface (SMI) +1. Configuration Analysis, Patterns, and Best Practices + 1. Custom Service Mesh Configuration +## Lifecycle management -### Suggested Topics +The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications for {{page.mesh_name}} can also be installed using Meshery. -- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. -- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). +The {{ page.name }} is currently under construction ({{ page.project_status }} state), which means that the adapter is not functional and cannot be interacted with through the Meshery UI at the moment. Check back here to see updates. -### Sample Application +Want to contribute? Check our [progress](page.github_link). +## Workload Management -The Meshery adapter for {{ page.name }} includes some sample applications operations. Meshery can be used to deploy any of these sample applications. +The Meshery Adapter for {{ page.name }} includes some sample applications operations. Meshery can be used to deploy any of these sample applications. - [BookInfo](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md#what-is-the-bookinfo-application) - This application is a polyglot composition of microservices are written in different languages and sample BookInfo application displays information about a book, similar to a single catalog entry of an online book store. @@ -36,3 +41,7 @@ The Meshery adapter for {{ page.name }} includes some sample applications operat - [hipster](https://github.com/GoogleCloudPlatform/microservices-demo) - Hipster Shop Application is a web-based, e-commerce demo application from the Google Cloud Platform. +### Suggested Reading + +- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. +- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). diff --git a/docs/_adapters/traefik-mesh.md b/docs/_adapters/traefik-mesh.md new file mode 100644 index 00000000000..263c517ca41 --- /dev/null +++ b/docs/_adapters/traefik-mesh.md @@ -0,0 +1,36 @@ +--- +layout: default +title: Meshery Adapter for Traefik Mesh +name: Meshery Adapter for Traefik Mesh +mesh_name: Traefik Mesh +version: v1.0 +port: 10006/tcp +project_status: beta +github_link: https://github.com/layer5io/meshery-traefik-mesh +image: /assets/img/service-meshes/traefik-mesh.svg +permalink: service-meshes/adapters/traefik-mesh +--- + +{% include adapter-status.html %} + +## Lifecycle management + +The {{page.name}} can install **{{page.version}}** of {{page.mesh_name}}. A number of sample applications can be installed using the {{page.name}}. + +The {{ page.name }} is currently under construction ({{ page.project_status }} state), which means that the adapter is not functional and cannot be interacted with through the Meshery UI at the moment. Check back here to see updates. + +Want to contribute? Check our [progress](page.github_link). + +### Sample Applications + +The {{ page.name }} includes some sample applications operations. Meshery can be used to deploy any of these sample applications. + +- [Bookinfo]({{ site.baseurl }}/guides/sample-apps#bookinfo) + - Follow this [tutorial workshop](https://github.com/layer5io/istio-service-mesh-workshop/blob/master/lab-2/README.md) to set up and deploy the BookInfo sample app on Istio using Meshery. +- [Httpbin]({{ site.baseurl }}/guides/sample-apps#httpbin) + - Httpbin is a simple HTTP request and response service. + +## Suggested Topics + +- Examine [Meshery's architecture]({{ site.baseurl }}/architecture) and how adapters fit in as a component. +- Learn more about [Meshery Adapters]({{ site.baseurl }}/architecture/adapters). diff --git a/docs/_config.yml b/docs/_config.yml index 1091729046a..2159f31b55f 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -16,17 +16,16 @@ title: Documentation email: community@layer5.io -author: Meshery +author: Layer5 description: > # this means to ignore newlines until "baseurl:" Documentation for Meshery, the multi-service mesh management plane for Istio, - Linkerd, Consul, Network Service Mesh, Octarine, Envoy, Kuma, Maesh, App Mesh, Citrix Service Mesh - and other service meshes. + Linkerd, Consul, Network Service Mesh, Octarine, Envoy, Kuma, Traefik Mesh, App Mesh, Citrix Service Mesh and other service meshes. # DO NOT CHANGE THE LINE OF THIS FILE without editing .circleci/circle_urls.sh -baseurl: "/docs" # the subpath of your site, e.g. /blog +baseurl: "" # the subpath of your site, e.g. /blog # This is mostly for testing -url: "https://meshery.layer5.io/docs" # the base hostname & protocol for your site +url: "https://docs.meshery.io" # the base hostname & protocol for your site # Social (First three Required) repo: "https://github.com/layer5io/meshery" @@ -56,12 +55,10 @@ color: "#3C494F" #"#647881" # "#30638e" # Build settings markdown: kramdown -plugins: ["jemoji"] - -# If you add tags to pages, you can link them to some external search -# If you want to disable this, comment the URL. +# If you add tags to pages, define this variable to link them to some external search +# If you want to link to tags locally on the site, leave this commented out # tag_search_endpoint: https://ask.cyberinfrastructure.org/search?q= -tag_color: danger # danger, success, warning, primary, info, secondary +tag_color: primary # danger, success, warning, primary, info, secondary accentColor: red # purple, green, etc. themeColor: red # purple, green, blue, orange, purple, grey @@ -71,6 +68,13 @@ permalink: /:year/:title/ markdown: kramdown exclude: [_site, CHANGELOG.md, LICENSE, README.md, vendor, Makefile] +plugins: + - jekyll-redirect-from + +sass: + sass_dir: _sass + style: compact + # Collections collections: docs: @@ -83,7 +87,16 @@ collections: guides: output: true permalink: /:collection/:path - + es: + output: true + permalink: /:collection/:path + releases: + output: true + permalink: project/:collection/:path + mesheryctlcommands: + output: true + permalink: reference/mesheryctl/:collection/:path + name: mesheryctlcommands # Defaults defaults: @@ -92,23 +105,16 @@ defaults: type: "docs" values: layout: page - - scope: + - + scope: path: "" type: "pages" values: layout: "page" - - scope: + - + scope: path: "posts" type: "posts" values: layout: "post" - - scope: - path: "guides" - type: "guide" - values: - layout: guide - - scope: - path: "adapters" - type: "adapters" - values: - layout: default \ No newline at end of file + \ No newline at end of file diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml new file mode 100644 index 00000000000..76995080a95 --- /dev/null +++ b/docs/_config_dev.yml @@ -0,0 +1,120 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing these this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'jekyll serve'. If you change this file, please restart the server process. + +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. + +title: Documentation +email: community@layer5.io +author: Layer5 +description: > # this means to ignore newlines until "baseurl:" + Documentation for Meshery, the multi-service mesh management plane for Istio, + Linkerd, Consul, Network Service Mesh, Octarine, Envoy, Kuma, Traefik Mesh, App Mesh, Citrix Service Mesh and other service meshes. + +# DO NOT CHANGE THE LINE OF THIS FILE without editing .circleci/circle_urls.sh +baseurl: "" # the subpath of your site, e.g. /blog + +# This is mostly for testing +url: "https://docs.meshery.io" # the base hostname & protocol for your site + +# Social (First three Required) +repo: "https://github.com/layer5io/meshery" +github_user: "layer5io" +github_repo: "meshery" +project: https://meshery.io + +# Optional +twitter: layer5 +linkedin: layer5 +dockerhub: layer5 + +# Should there be feedback buttons at the bottom of pages? +feedback: false + +# Link to a privacy policy in footer, uncomment and define if wanted +# privacy: https://domain.com/privacy + +google-analytics: UA-2969471-4 +# Image and (square) dimension for logo (don't start with /) +# If commented, will use material hat theme +# logo: "assets/img/logo/SRCC-square-red.png" +logo_pixels: 34 +color: "#3C494F" #"#647881" # "#30638e" +# color: "#8c1515" # primary color for header, buttons + +# Build settings +markdown: kramdown + +# If you add tags to pages, define this variable to link them to some external search +# If you want to link to tags locally on the site, leave this commented out +# tag_search_endpoint: https://ask.cyberinfrastructure.org/search?q= +tag_color: primary # danger, success, warning, primary, info, secondary + +accentColor: red # purple, green, etc. +themeColor: red # purple, green, blue, orange, purple, grey +fixedNav: 'true' # true or false + +permalink: /:year/:title/ +markdown: kramdown +exclude: [_site, CHANGELOG.md, LICENSE, README.md, vendor, Makefile] + +# plugins: +# - jekyll-redirect-from + +sass: + sass_dir: _sass + style: compact + +# Collections +collections: + docs: + output: true + permalink: /:collection/:path + adapters: + output: true + permalink: /service-meshes/:collection/:path + name: adapters + guides: + output: true + permalink: /:collection/:path + es: + output: true + permalink: /:collection/:path + releases: + output: true + permalink: project/:collection/:path + mesheryctlcommands: + output: true + permalink: reference/mesheryctl/:collection/:path + name: mesheryctlcommands + +# Defaults +defaults: + - scope: + path: "_docs" + type: "docs" + values: + layout: page + - + scope: + path: "" + type: "pages" + values: + layout: "page" + - + scope: + path: "posts" + type: "posts" + values: + layout: "post" + \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/global/commands/mesheryctl.yaml b/docs/_data/mesheryctlcommands/global/commands/mesheryctl.yaml new file mode 100644 index 00000000000..d7c62168bf1 --- /dev/null +++ b/docs/_data/mesheryctlcommands/global/commands/mesheryctl.yaml @@ -0,0 +1,4 @@ +name : mesheryctl +description : Displays help about any command. +usage: | + `mesheryctl` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/global/subcommands/config.yaml b/docs/_data/mesheryctlcommands/global/subcommands/config.yaml new file mode 100644 index 00000000000..24eaaa0eb0d --- /dev/null +++ b/docs/_data/mesheryctlcommands/global/subcommands/config.yaml @@ -0,0 +1,4 @@ +name: config +description: configures Meshery with the kubeconfig, generated with the help of user details, to provide cluster access for public clouds(GKE/EKS). +usage: | + `mesheryctl system config gke --token "PATH TO TOKEN"` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/global/subcommands/help.yaml b/docs/_data/mesheryctlcommands/global/subcommands/help.yaml new file mode 100644 index 00000000000..5ea0a5a79d1 --- /dev/null +++ b/docs/_data/mesheryctlcommands/global/subcommands/help.yaml @@ -0,0 +1,4 @@ +name: help +description: Displays helpful information about any command. +usage: | + `mesheryctl --help` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/global/subcommands/mesheryctl-config.yaml b/docs/_data/mesheryctlcommands/global/subcommands/mesheryctl-config.yaml new file mode 100644 index 00000000000..9098359e5c4 --- /dev/null +++ b/docs/_data/mesheryctlcommands/global/subcommands/mesheryctl-config.yaml @@ -0,0 +1,4 @@ +name: mesheryctl-config +description: (optional) path to Meshery Client (mesheryctl) configuration file (~/.meshery/mesheryctl.yaml) to overrides defaults. +usage: | + `mesheryctl perf --mesheryctl-config=~/.meshery/mesheryctl.yaml` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/global/subcommands/verbose.yaml b/docs/_data/mesheryctlcommands/global/subcommands/verbose.yaml new file mode 100644 index 00000000000..75a0a315168 --- /dev/null +++ b/docs/_data/mesheryctlcommands/global/subcommands/verbose.yaml @@ -0,0 +1,4 @@ +name: verbose +description: (optional) Sets the log level to debug for verbose output. +usage: | + `mesheryctl --verbose` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/global/subcommands/version.yaml b/docs/_data/mesheryctlcommands/global/subcommands/version.yaml new file mode 100644 index 00000000000..39b2b77fc50 --- /dev/null +++ b/docs/_data/mesheryctlcommands/global/subcommands/version.yaml @@ -0,0 +1,4 @@ +name: version +description: Displays the version of the Meshery Client (mesheryctl) and the SHA of the release binary. +usage: | + `mesheryctl system version` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/commands/system.yaml b/docs/_data/mesheryctlcommands/lifecycle/commands/system.yaml new file mode 100644 index 00000000000..c29f75b8264 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/commands/system.yaml @@ -0,0 +1,4 @@ +name : system +description: +usage: | + `mesheryctl system` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/flags/channel-set.yaml b/docs/_data/mesheryctlcommands/lifecycle/flags/channel-set.yaml new file mode 100644 index 00000000000..8ff78c9815f --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/flags/channel-set.yaml @@ -0,0 +1,5 @@ +flag: set +arg: channel +description: set release channel and version. +usage: | + `mesheryctl system channel set [stable|stable-version|edge|edge-version]` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/flags/channel-switch.yaml b/docs/_data/mesheryctlcommands/lifecycle/flags/channel-switch.yaml new file mode 100644 index 00000000000..99c1942e00e --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/flags/channel-switch.yaml @@ -0,0 +1,5 @@ +flag: switch +arg: channel +description: switch release channel and version +usage: | + `mesheryctl system channel switch [stable|stable-version|edge|edge-version]` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/flags/channel-view.yaml b/docs/_data/mesheryctlcommands/lifecycle/flags/channel-view.yaml new file mode 100644 index 00000000000..2b87d23f643 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/flags/channel-view.yaml @@ -0,0 +1,5 @@ +flag: view +arg: channel +description: view release channel and version +usage: | + `mesheryctl system channel view` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/flags/skip-update.yaml b/docs/_data/mesheryctlcommands/lifecycle/flags/skip-update.yaml new file mode 100644 index 00000000000..9356557ef91 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/flags/skip-update.yaml @@ -0,0 +1,5 @@ +flag: --skip-update +arg: start +description: (optional) skip updates available in Meshery. +usage: | + `mesheryctl system start --skip-update` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/flags/start-reset.yaml b/docs/_data/mesheryctlcommands/lifecycle/flags/start-reset.yaml new file mode 100644 index 00000000000..6155901b1b3 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/flags/start-reset.yaml @@ -0,0 +1,5 @@ +flag: --reset +arg: start +description: (optional) reset Meshery’s configuration file to default settings. +usage: | + `mesheryctl system start --reset` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/flags/stop-reset.yaml b/docs/_data/mesheryctlcommands/lifecycle/flags/stop-reset.yaml new file mode 100644 index 00000000000..a0260da40ca --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/flags/stop-reset.yaml @@ -0,0 +1,5 @@ +flag: --reset +arg: stop +description: (optional) reset Meshery’s configuration file to default settings. +usage: | + `mesheryctl system stop --reset` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/channel.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/channel.yaml new file mode 100644 index 00000000000..6645a1d4a21 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/channel.yaml @@ -0,0 +1,4 @@ +name: channel +description: Switch between release channels. +usage: | + `mesheryctl system channel` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/completion.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/completion.yaml new file mode 100644 index 00000000000..d72818f2538 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/completion.yaml @@ -0,0 +1,4 @@ +name: completion +description: Generates completion script. +usage: | + `mesheryctl system completion [bash\|zsh\|fish]` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/config.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/config.yaml new file mode 100644 index 00000000000..3647764027e --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/config.yaml @@ -0,0 +1,4 @@ +name: config +description: Configures Meshery to use a Kubernetes cluster. +usage: | + `mesheryctl system config gke --token ~/Downloads/auth.json` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/help.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/help.yaml new file mode 100644 index 00000000000..c7af5f89fec --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/help.yaml @@ -0,0 +1,4 @@ +name: help +description: Displays help about any Meshery lifecycle management command. +usage: | + `mesheryctl system --help` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/log.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/log.yaml new file mode 100644 index 00000000000..75ac5bb56dc --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/log.yaml @@ -0,0 +1,4 @@ +name: log +description: Starts tailing Meshery server debug logs. +usage: | + `mesheryctl system log` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/reset.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/reset.yaml new file mode 100644 index 00000000000..841ece242a7 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/reset.yaml @@ -0,0 +1,4 @@ +name: reset +description: Resets meshery.yaml with copy from Meshery repo. Warning - Any local changes will be overwritten. +usage: | + `mesheryctl system reset` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/start.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/start.yaml new file mode 100644 index 00000000000..14998478280 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/start.yaml @@ -0,0 +1,4 @@ +name: start +description: Start all Meshery containers. +usage: | + `mesheryctl system start` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/status.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/status.yaml new file mode 100644 index 00000000000..889a397fe9c --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/status.yaml @@ -0,0 +1,4 @@ +name: status +description: Displays the status of Meshery’s containers (server and adapters). +usage: | + `mesheryctl system status` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/stop.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/stop.yaml new file mode 100644 index 00000000000..cf52d6b9c56 --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/stop.yaml @@ -0,0 +1,4 @@ +name: stop +description: Stop all Meshery containers. +usage: | + `mesheryctl system stop` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/lifecycle/subcommands/update.yaml b/docs/_data/mesheryctlcommands/lifecycle/subcommands/update.yaml new file mode 100644 index 00000000000..cea0d3296be --- /dev/null +++ b/docs/_data/mesheryctlcommands/lifecycle/subcommands/update.yaml @@ -0,0 +1,4 @@ +name: update +description: Pull new Meshery images from Docker Hub. Does not pulls new mesheryctl client. This command may be executed while Meshery is running. +usage: | + `mesheryctl system update` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/meshes/commands/mesh.yaml b/docs/_data/mesheryctlcommands/meshes/commands/mesh.yaml new file mode 100644 index 00000000000..094de128be3 --- /dev/null +++ b/docs/_data/mesheryctlcommands/meshes/commands/mesh.yaml @@ -0,0 +1,2 @@ +name: mesh +description: Lifecycle management of service meshes \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/meshes/flags/help.yaml b/docs/_data/mesheryctlcommands/meshes/flags/help.yaml new file mode 100644 index 00000000000..cdca1444ff9 --- /dev/null +++ b/docs/_data/mesheryctlcommands/meshes/flags/help.yaml @@ -0,0 +1,4 @@ +name: --help, -h +description: Displays help about any service mesh lifecycle management command. +usage: | + `mesheryctl help` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/meshes/flags/platform.yaml b/docs/_data/mesheryctlcommands/meshes/flags/platform.yaml new file mode 100644 index 00000000000..beecf8906c6 --- /dev/null +++ b/docs/_data/mesheryctlcommands/meshes/flags/platform.yaml @@ -0,0 +1,4 @@ +name: --platform +description: Identify platform to provision service mesh on (e.g. Docker, K8s) +usage: | + `--platform docker` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/meshes/flags/profile.yaml b/docs/_data/mesheryctlcommands/meshes/flags/profile.yaml new file mode 100644 index 00000000000..22f901532ad --- /dev/null +++ b/docs/_data/mesheryctlcommands/meshes/flags/profile.yaml @@ -0,0 +1,4 @@ +name: --profile +description: Use specific configuration profile +usage: | + `--profile mTLS` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/meshes/subcommands/init.yaml b/docs/_data/mesheryctlcommands/meshes/subcommands/init.yaml new file mode 100644 index 00000000000..5c2bb01293b --- /dev/null +++ b/docs/_data/mesheryctlcommands/meshes/subcommands/init.yaml @@ -0,0 +1,6 @@ +name: init +description: Provision a service mesh +flags: + - name: --platform + - name: --profile + - name: --help, -h \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/commands/perf.yaml b/docs/_data/mesheryctlcommands/performance/commands/perf.yaml new file mode 100644 index 00000000000..d1b6c03c75a --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/commands/perf.yaml @@ -0,0 +1,4 @@ +name: perf +description: Performance management - baselining and testing. +usage: | + `mesheryctl perf --name "a quick stress test" --url http://192.168.1.15/productpage --qps 300 --concurrent-requests 2 --duration 30s --load-generator wrk2` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/-name.yaml b/docs/_data/mesheryctlcommands/performance/flags/-name.yaml new file mode 100644 index 00000000000..9ff73a20974 --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/-name.yaml @@ -0,0 +1,3 @@ +name: --name (optional) +description: A memorable name for the test. (default) a random string +usage: \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/concurrent-requests.yaml b/docs/_data/mesheryctlcommands/performance/flags/concurrent-requests.yaml new file mode 100644 index 00000000000..eac45b6c46e --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/concurrent-requests.yaml @@ -0,0 +1,4 @@ +name: --concurrent-requests (optional) +description: Number of concurrent requests (default) 1 +usage: | + `--concurrent-requests 10` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/duration.yaml b/docs/_data/mesheryctlcommands/performance/flags/duration.yaml new file mode 100644 index 00000000000..5db5d9abe6d --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/duration.yaml @@ -0,0 +1,4 @@ +name: --duration(optional) +description: Duration of the test. +usage: | + `10s, 5m, 2h` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/file.yaml b/docs/_data/mesheryctlcommands/performance/flags/file.yaml new file mode 100644 index 00000000000..18d02679633 --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/file.yaml @@ -0,0 +1,4 @@ +name: --file (optional) +description: URI of the service mesh performance test configuration file. (default) empty string +usage: | + `--file soak-test-clusterA.yaml` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/help.yaml b/docs/_data/mesheryctlcommands/performance/flags/help.yaml new file mode 100644 index 00000000000..01b69dfbdd2 --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/help.yaml @@ -0,0 +1,4 @@ +name: --help, -h +description: Displays help the performance management command. +usage: | + `mesheryctl perf --help` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/load-generator.yaml b/docs/_data/mesheryctlcommands/performance/flags/load-generator.yaml new file mode 100644 index 00000000000..6b37e333750 --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/load-generator.yaml @@ -0,0 +1,4 @@ +name: --load-generator (optional) +description: Choice of load generator - fortio (OR) wrk2 (default) fortio +usage: | + `--load-generator=fortio` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/mesh.yaml b/docs/_data/mesheryctlcommands/performance/flags/mesh.yaml new file mode 100644 index 00000000000..bec7c2e7195 --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/mesh.yaml @@ -0,0 +1,3 @@ +name: --mesh (optional) +description: Name of the service mesh. (default) empty string +usage: \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/qps.yaml b/docs/_data/mesheryctlcommands/performance/flags/qps.yaml new file mode 100644 index 00000000000..664c8414808 --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/qps.yaml @@ -0,0 +1,4 @@ +name: --qps (optional) +description: Queries per second (default) 0 (0 - means to use the CPU unbounded to generate as many requests as possible. +usage: | + `--qps 30` \ No newline at end of file diff --git a/docs/_data/mesheryctlcommands/performance/flags/url.yaml b/docs/_data/mesheryctlcommands/performance/flags/url.yaml new file mode 100644 index 00000000000..319857c0131 --- /dev/null +++ b/docs/_data/mesheryctlcommands/performance/flags/url.yaml @@ -0,0 +1,4 @@ +name: --url (required) +description: URL of the endpoint send load to during testing. +usage: | + `http://my-service/api/v1/test` \ No newline at end of file diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index 6a0f8899ced..5fc8c3f0a84 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -1,5 +1,5 @@ - title: Quick Start - url: "installation/#getting-started" + url: "installation/quick-start" - title: All Platforms url: "installation/platforms" - title: Project @@ -8,3 +8,5 @@ external_url: http://slack.layer5.io - title: GitHub external_url: https://github.com/layer5io/meshery +- title: "πŸ‡²πŸ‡½ EspaΓ±ol" + url: "es" \ No newline at end of file diff --git a/docs/_data/toc.yml b/docs/_data/toc.yml index 9eea04ff7a6..9f150525b62 100644 --- a/docs/_data/toc.yml +++ b/docs/_data/toc.yml @@ -1,13 +1,31 @@ - title: Documentation - url: '' + url: "" links: - title: Overview url: overview + - title: Project + url: project + children: + - title: Contributing + url: project/contributing + - title: Releases + url: project/releases + - title: Build & Release (CI) + url: project/build-and-release + - title: Vulnerabilities + url: project/security-vulnerabilities + - title: FAQ + url: project/faq - title: Quick Start - url: installation + url: installation/quick-start + children: + - title: Installing mesheryctl + url: installation/mesheryctl - title: Supported Platforms url: installation/platforms children: + - title: AKS + url: installation/platforms/aks - title: Docker url: installation/platforms/docker - title: EKS @@ -21,67 +39,74 @@ - title: Minikube url: installation/platforms/minikube - title: Windows - url: installation/#windows - - title: WSL2 - url: installation/platforms/wsl2 + url: installation/platforms/windows +- title: Concepts + url: concepts + links: - title: Architecture - url: architecture - children: - - title: Adapters - url: architecture/adapters - - title: Functionality - url: functionality - children: - - title: Lifecycle Management - url: functionality/lifecycle-management - - title: Performance Management - url: functionality/performance-management - - title: SMI Conformance - url: functionality/smi-conformance - - title: Service Meshes - url: service-meshes - children: - - title: App Mesh - url: service-meshes/adapters/app-mesh - - title: Citrix Service Mesh - url: service-meshes/adapters/cpx - - title: Consul - url: service-meshes/adapters/consul - - title: Istio - url: service-meshes/adapters/istio/istio - - title: Kuma - url: service-meshes/adapters/kuma - - title: Linkerd - url: service-meshes/adapters/linkerd - - title: Maesh - url: service-meshes/adapters/maesh - - title: Network Service Mesh - url: service-meshes/adapters/nsm/nsm - - title: Octarine - url: service-meshes/adapters/octarine/octarine - - title: Open Service Mesh - url: service-meshes/adapters/osm - - title: Tanzu - url: service-meshes/adapters/tanzu-sm - - title: Extensibility - url: extensibility - - title: Guides - url: guides - children: - - title: Multiple Adapters - url: guides/multiple-adapters - - title: Using mesheryctl - url: guides/mesheryctl - - title: Upgrading Meshery - url: guides/upgrade - - title: Integrating Prometheus and Grafana - url: guides/meshery-metrics - - title: Project - url: project - children: - - title: Contributing - url: project/contributing - - title: Releases - url: project/releases - - title: Vulnerabilities - url: project/security-vulnerabilities + url: concepts/architecture + - title: Adapters + url: concepts/architecture/adapters +- title: Functionality + url: functionality + links: + - title: Lifecycle Management + url: functionality/lifecycle-management + - title: Performance Management + url: functionality/performance-management + - title: Service Mesh Interface (SMI) + url: functionality/service-mesh-interface +- title: Service Meshes + url: service-meshes + links: + - title: App Mesh + url: service-meshes/adapters/app-mesh + - title: Citrix Service Mesh + url: service-meshes/adapters/cpx + - title: Consul + url: service-meshes/adapters/consul + - title: Istio + url: service-meshes/adapters/istio + - title: Kuma + url: service-meshes/adapters/kuma + - title: Linkerd + url: service-meshes/adapters/linkerd + - title: Network Service Mesh + url: service-meshes/adapters/nsm + - title: NGINX Service Mesh + url: service-meshes/adapters/nginx-sm + - title: Octarine + url: service-meshes/adapters/octarine + - title: Open Service Mesh + url: service-meshes/adapters/osm + - title: Tanzu + url: service-meshes/adapters/tanzu-sm + - title: Traefik Mesh + url: service-meshes/adapters/traefik-mesh +- title: Guides + url: guides + links: + - title: Deploying Sample Applications + url: guides/sample-apps + - title: Integrating Prometheus and Grafana + url: guides/meshery-metrics + - title: Upgrading Meshery + url: guides/upgrade + - title: Using mesheryctl + url: guides/mesheryctl + - title: Using Multiple Meshery Adapters + url: guides/multiple-adapters +- title: Extensibility + url: extensibility + links: + - title: "Service Mesh Adapters" + url: extensibility/adapters + - title: "Load Generators" + url: extensibility/load-generators + - title: "Providers" + url: extensibility/providers +- title: Reference + url: reference + links: + - title: mesheryctl Command Reference + url: reference/mesheryctl diff --git a/docs/_includes/adapter-labs.html b/docs/_includes/adapter-labs.html new file mode 100644 index 00000000000..e700b2ffd81 --- /dev/null +++ b/docs/_includes/adapter-labs.html @@ -0,0 +1,16 @@ +### Try out the {{page.title}} + +Try Meshery using a real environment right in your browser with an interactive lab. The interactive labs help you get started and learn how to run Meshery and {{page.mesh_name}} in production. + +
    +
    + \ No newline at end of file diff --git a/docs/_includes/adapter-status.html b/docs/_includes/adapter-status.html new file mode 100644 index 00000000000..dfd9f800bc7 --- /dev/null +++ b/docs/_includes/adapter-status.html @@ -0,0 +1,10 @@ + + + + + + + + + +
    Service Mesh Adapter StatusLatest Supported Mesh Version
    {{ page.mesh_name }}{{ page.project_status }}{{page.version}}
    \ No newline at end of file diff --git a/docs/_includes/breadcrumbs.html b/docs/_includes/breadcrumbs.html index c0f43131d13..4a14eaee0cf 100644 --- a/docs/_includes/breadcrumbs.html +++ b/docs/_includes/breadcrumbs.html @@ -1,11 +1,11 @@ diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html old mode 100755 new mode 100644 index 5bdac7e9ed7..19c88fd3e4d --- a/docs/_includes/footer.html +++ b/docs/_includes/footer.html @@ -136,3 +136,9 @@ + + + + + + diff --git a/docs/_includes/head.html b/docs/_includes/head.html old mode 100755 new mode 100644 index febc4ceb7d9..29abce2797c --- a/docs/_includes/head.html +++ b/docs/_includes/head.html @@ -5,7 +5,7 @@ - + @@ -35,7 +35,8 @@ - + + +{% endif %} +{% include toc.html %} \ No newline at end of file diff --git a/docs/_layouts/post.html b/docs/_layouts/post.html old mode 100755 new mode 100644 index 6492baedd9f..c3f2178258c --- a/docs/_layouts/post.html +++ b/docs/_layouts/post.html @@ -6,3 +6,8 @@

    {{ page.title }}

    {% if page.badges %}{% for badge in page.badges %}{{ badge.tag }}{% endfor %}{% endif %} {{ content }} +{% if page.content contains "code" %} + +{% endif %} diff --git a/docs/_layouts/release.html b/docs/_layouts/release.html new file mode 100644 index 00000000000..22006793d54 --- /dev/null +++ b/docs/_layouts/release.html @@ -0,0 +1,21 @@ +--- +layout: default +display-title: "false" +--- +

    Meshery {{page.tag}} + + + + +

    + +

    Released on {{ page.date | date: "%B %d, %Y" }}

    + +{{ content }} +{% if page.content contains "code" %} + +{% endif %} +{% include toc.html %} \ No newline at end of file diff --git a/docs/_releases/v0.0.1.md b/docs/_releases/v0.0.1.md new file mode 100644 index 00000000000..a0aeee1c112 --- /dev/null +++ b/docs/_releases/v0.0.1.md @@ -0,0 +1,13 @@ +--- +layout: release +date: 2019-3-7 +tag: v0.0.1 +--- + +**New release** + +- Initial version of Meshery + - Connect to Kubernetes. + - Run preconfigured commands on Kubernetes with Istio. + + diff --git a/docs/_releases/v0.0.2.md b/docs/_releases/v0.0.2.md new file mode 100644 index 00000000000..edef84fc606 --- /dev/null +++ b/docs/_releases/v0.0.2.md @@ -0,0 +1,10 @@ +--- +layout: release +date: 2019-3-20 +tag: v0.0.2 +--- + +**What's new?** + +- Ability to support running custom yaml on Kubernetes with Istio. + diff --git a/docs/_releases/v0.0.3.md b/docs/_releases/v0.0.3.md new file mode 100644 index 00000000000..595418e9165 --- /dev/null +++ b/docs/_releases/v0.0.3.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2019-3-30 +tag: v0.0.3 +--- + +**What's new?** + +- Initial version with support of Meshery adapters. + +* Release of a pre-alpha version of Istio adapter. + diff --git a/docs/_releases/v0.0.4.md b/docs/_releases/v0.0.4.md new file mode 100644 index 00000000000..09d66e12643 --- /dev/null +++ b/docs/_releases/v0.0.4.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2019-4-7 +tag: v0.0.4 +--- + +**What's new?** +-Ability to view persisted results. + +- Integration and support for Grafana charts. +- Embedding panels in iframe. + diff --git a/docs/_releases/v0.0.5.md b/docs/_releases/v0.0.5.md new file mode 100644 index 00000000000..5dcfeba02be --- /dev/null +++ b/docs/_releases/v0.0.5.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2019-4-12 +tag: v0.0.5 +--- + +**What's new?** + +- Pre-alpha Linkerd adapter. + +* Ability to filter results. + diff --git a/docs/_releases/v0.0.6.md b/docs/_releases/v0.0.6.md new file mode 100644 index 00000000000..e29111c9d27 --- /dev/null +++ b/docs/_releases/v0.0.6.md @@ -0,0 +1,13 @@ +--- +layout: release +date: 2019-4-20 +tag: v0.0.6 +--- + +**What's new?** + +- Pre-alpha Consul adapter. + +* Support for deploying SMI Istio adapter. +* Ensuring compatibility to apply SMI manifests through Meshery. + diff --git a/docs/_releases/v0.0.7.md b/docs/_releases/v0.0.7.md new file mode 100644 index 00000000000..1dce33e2446 --- /dev/null +++ b/docs/_releases/v0.0.7.md @@ -0,0 +1,13 @@ +--- +layout: release +date: 2019-4-29 +tag: v0.0.7 +--- + +**What's new?** + +- Migrated away from embedded iframe grafana charts + +* Now using Chartjs for charting. +* Now using C3 for charting. + diff --git a/docs/_releases/v0.0.8.md b/docs/_releases/v0.0.8.md new file mode 100644 index 00000000000..f08f34167b5 --- /dev/null +++ b/docs/_releases/v0.0.8.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2019-5-1 +tag: v0.0.8 +--- + +**What's new?** + +- Ability to import Grafana board json + +* Integrating with Prometheus directly for metrics. + diff --git a/docs/_releases/v0.0.9.md b/docs/_releases/v0.0.9.md new file mode 100644 index 00000000000..fd6593f7c00 --- /dev/null +++ b/docs/_releases/v0.0.9.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2019-5-15 +tag: v0.0.9 +--- + +**What's new?** + +- Documentation site segragated + +* content laid out. + diff --git a/docs/_releases/v0.1.0.md b/docs/_releases/v0.1.0.md new file mode 100644 index 00000000000..3bb075877fc --- /dev/null +++ b/docs/_releases/v0.1.0.md @@ -0,0 +1,10 @@ +--- +layout: release +date: 2019-5-29 +tag: v0.1.0 +--- + +**What's new** + +- Initial fully functional Istio. + diff --git a/docs/_releases/v0.1.1.md b/docs/_releases/v0.1.1.md new file mode 100644 index 00000000000..c49dca39cb4 --- /dev/null +++ b/docs/_releases/v0.1.1.md @@ -0,0 +1,10 @@ +--- +layout: release +date: 2019-6-12 +tag: v0.1.1 +--- + +**What's new?** + +- Patch for Alpine bug. + diff --git a/docs/_releases/v0.1.2.md b/docs/_releases/v0.1.2.md new file mode 100644 index 00000000000..a3233eccb6d --- /dev/null +++ b/docs/_releases/v0.1.2.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2019-6-20 +tag: v0.1.2 +--- + +**What's new?** + +- Synchronization of browser local storage + +* Meshery in-memory session storage. + diff --git a/docs/_releases/v0.1.3.md b/docs/_releases/v0.1.3.md new file mode 100644 index 00000000000..ba2d2860559 --- /dev/null +++ b/docs/_releases/v0.1.3.md @@ -0,0 +1,9 @@ +--- +layout: release +date: 2019-07-01 +tag: v0.1.3 +--- + +**What's new?** + +- Migrate from Configure Meshery to Settings page. diff --git a/docs/_releases/v0.1.4.md b/docs/_releases/v0.1.4.md new file mode 100644 index 00000000000..d12b67b21af --- /dev/null +++ b/docs/_releases/v0.1.4.md @@ -0,0 +1,10 @@ +--- +layout: release +date: 2019-07-27 +tag: v0.1.4 +--- + +**What's new?** + +- Changelog + diff --git a/docs/_releases/v0.1.5.md b/docs/_releases/v0.1.5.md new file mode 100644 index 00000000000..cc38476b2f1 --- /dev/null +++ b/docs/_releases/v0.1.5.md @@ -0,0 +1,14 @@ +--- +layout: release +date: 2019-09-20 +tag: v0.1.5 +--- + +**What's new?** + +- Changelog +- UX Improvements + +* `mesheryctl start` now waits for meshery application containers to be up before launching the user's browser. +* `mesheryctl stop` now shows command progress akin to the experience when using `meshery` bash script. + diff --git a/docs/_releases/v0.1.6.md b/docs/_releases/v0.1.6.md new file mode 100644 index 00000000000..05e487e6ecb --- /dev/null +++ b/docs/_releases/v0.1.6.md @@ -0,0 +1,14 @@ +--- +layout: default +date: 2019-10-14 +tag: v0.1.6 +--- + +**What's new?** + +- Changelog + +* New UI for managing Meshery's connection to Kubernetes cluster. +* New `mesheryctl` compatibility for Windows for opening default browser upon `start`. +* New sample app added to the istio adapter - Hipster app (Google's Microservices demo application). + diff --git a/docs/_releases/v0.2.0.md b/docs/_releases/v0.2.0.md new file mode 100644 index 00000000000..34315d5e953 --- /dev/null +++ b/docs/_releases/v0.2.0.md @@ -0,0 +1,14 @@ +--- +layout: release +date: 2019-10-23 +tag: v0.2.1 +--- + +**What's new?** + +- Meshery Adapters + - Adapter introduced for Network Service Mesh. +- Meshery Server + - Ability to run performance tests asynchronously. + - Collect & persist node metrics. + diff --git a/docs/_releases/v0.2.1.md b/docs/_releases/v0.2.1.md new file mode 100644 index 00000000000..7446816c641 --- /dev/null +++ b/docs/_releases/v0.2.1.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2019-10-24 +tag: v0.2.1 +--- + +### What's new? + +- Mesheryctl + - Overhaul of in-cluster vs out-of-cluster Kubernetes setup. + diff --git a/docs/_releases/v0.2.2.md b/docs/_releases/v0.2.2.md new file mode 100644 index 00000000000..6ec41beed0c --- /dev/null +++ b/docs/_releases/v0.2.2.md @@ -0,0 +1,13 @@ +--- +layout: release +date: 2019-10-26 +tag: v0.2.2 +--- + +### What's new? + +- Mesheryctl + - Improved `update` command, no overwriting in local configuration while `start` command. +- Meshery UI + - A new modal view to organize and display performance results in a tabular format. + diff --git a/docs/_releases/v0.2.3.md b/docs/_releases/v0.2.3.md new file mode 100644 index 00000000000..19d7fa2883c --- /dev/null +++ b/docs/_releases/v0.2.3.md @@ -0,0 +1,14 @@ +--- +layout: release +date: 2019-11-5 +tag: v0.2.3 +--- + +### What's new? + +- Mesheryctl + - Improved `status` command output on Windows. +- Meshery Server + - Ability to deploy Meshery on Istio. + - Adapter Chips: Move adapter port number into tooltip. + diff --git a/docs/_releases/v0.2.4.md b/docs/_releases/v0.2.4.md new file mode 100644 index 00000000000..b768a30e427 --- /dev/null +++ b/docs/_releases/v0.2.4.md @@ -0,0 +1,17 @@ +--- +layout: release +date: 2019-11-7 +tag: v0.2.4 +--- + +### What's new? + +- Mesheryctl + - Homebrew support available for mesheryctl. +- Meshery Server + - Meshery Adapter for Octarine released as stable. +- Documentation + - Revised quick start guide for Mac, Linux and Windows. + - WSL2 support published. + - GKE kubeconfig generation script switched to `--decode`. + diff --git a/docs/_releases/v0.3.1.md b/docs/_releases/v0.3.1.md new file mode 100644 index 00000000000..714674ce429 --- /dev/null +++ b/docs/_releases/v0.3.1.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2019-11-13 +tag: v0.3.1 +--- + +### What's new? + +- Meshery Server + - Support for wrk2 as an alternative load generator. + diff --git a/docs/_releases/v0.3.10.md b/docs/_releases/v0.3.10.md new file mode 100644 index 00000000000..35bec448eb6 --- /dev/null +++ b/docs/_releases/v0.3.10.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-3-9 +tag: v0.3.10 +--- + +### What's new? + +- Mesheryctl + - Introduces `mesheryctl perf` command. See [Meshery CLI Commands & Documentation](https://docs.google.com/document/d/1xRlFpElRmybJ3WacgPKXgCSiQ2poJl3iCCV1dAalf0k/edit#) for reference. + diff --git a/docs/_releases/v0.3.11.md b/docs/_releases/v0.3.11.md new file mode 100644 index 00000000000..44485b232b9 --- /dev/null +++ b/docs/_releases/v0.3.11.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-3-11 +tag: v0.3.11 +--- + +### What's new? + +- Mesheryctl + - Fixes minor user experience issues on `mesheryctl perf` command. See [Meshery CLI Commands & Documentation](https://docs.google.com/document/d/1xRlFpElRmybJ3WacgPKXgCSiQ2poJl3iCCV1dAalf0k/edit#) for reference. + diff --git a/docs/_releases/v0.3.12.md b/docs/_releases/v0.3.12.md new file mode 100644 index 00000000000..3392e077fa0 --- /dev/null +++ b/docs/_releases/v0.3.12.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-4-10 +tag: v0.3.12 +--- + +### What's new? + +- Mesheryctl + - Initial Scoop Bucket and Scoop package for `mesheryctl`. + diff --git a/docs/_releases/v0.3.13.md b/docs/_releases/v0.3.13.md new file mode 100644 index 00000000000..a03257bfbf6 --- /dev/null +++ b/docs/_releases/v0.3.13.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-4-16 +tag: v0.3.13 +--- + +### What's new? + +- Mesheryctl + - Point release for mesheryctl's initial ARM support. + diff --git a/docs/_releases/v0.3.14.md b/docs/_releases/v0.3.14.md new file mode 100644 index 00000000000..9848bcf1756 --- /dev/null +++ b/docs/_releases/v0.3.14.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-4-24 +tag: v0.3.14 +--- + +### What's new? + +- Mesheryctl + - Behavior change in `mesheryctl start` to check for new Meshery server images by default. + diff --git a/docs/_releases/v0.3.15.md b/docs/_releases/v0.3.15.md new file mode 100644 index 00000000000..e9bcaa4ac42 --- /dev/null +++ b/docs/_releases/v0.3.15.md @@ -0,0 +1,14 @@ +--- +layout: release +date: 2020-5-4 +tag: v0.3.15 +--- + +Released on 1 May 2020 + +### What's new? + +- Mesheryctl + - Feature: Addition of `mesheryctl perf --file ' support for [SMP formatted](https://github.com/layer5io/service-mesh-performance) performance test profiles. + - Feature: Behavior change `mesheryctl perf` for using tokens and supporting JWT. + diff --git a/docs/_releases/v0.3.16.md b/docs/_releases/v0.3.16.md new file mode 100644 index 00000000000..f8161bb2f0b --- /dev/null +++ b/docs/_releases/v0.3.16.md @@ -0,0 +1,13 @@ +--- +layout: release +date: 2020-6-22 +tag: v0.3.16 +--- + +### What's new? + +- Mesheryctl + - Feature: Addition of `mesheryctl system` as the new command for lifecycle management of Meshery. + - All Meshery lifecycle management commands like `start`, `stop`, `reset`, `logs` and so on are now found under `system`. + - Feature: Addition of `mesheryctl system config` as a new subcommand to assist with configuring Meshery to communicate with Kubernetes deployments in GKE, AKS, and EKS. + diff --git a/docs/_releases/v0.3.17.md b/docs/_releases/v0.3.17.md new file mode 100644 index 00000000000..43ca028b5b7 --- /dev/null +++ b/docs/_releases/v0.3.17.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2020-1-7 +tag: v0.3.17 +--- + +### What's new? + +- Meshery + - Feature: New "stable" release channel established. + - Feature: Enhanced UX for advanced performance test HTTP headers. + diff --git a/docs/_releases/v0.3.18.md b/docs/_releases/v0.3.18.md new file mode 100644 index 00000000000..cd72ab8377a --- /dev/null +++ b/docs/_releases/v0.3.18.md @@ -0,0 +1,16 @@ +--- +layout: release +date: 2020-07-04 +tag: v0.3.18 +--- + +### What's new? + +- Mesheryctl + - `mesheryctl version` now retrieves server version information, including release tag and git sha. + - `meshery perf` now supports SPMS as a package through the `--file` flag. +- Meshery + - Extensibility enhancement: an abstract interface, Load Generator Interface, is now provided for ease of extending Meshery to support other load generators, like Nighthawk. +- Docs + - uplifted EKS and GKE instructions + diff --git a/docs/_releases/v0.3.19.md b/docs/_releases/v0.3.19.md new file mode 100644 index 00000000000..dcc4614d59d --- /dev/null +++ b/docs/_releases/v0.3.19.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-7-5 +tag: v0.3.19 +--- + +### What's new? + +- Mesheryctl + - Important bug fix for failure to initialize app folder (`~/meshery`) and app config file (`meshery.yaml`). + diff --git a/docs/_releases/v0.3.2.md b/docs/_releases/v0.3.2.md new file mode 100644 index 00000000000..569d4f9d696 --- /dev/null +++ b/docs/_releases/v0.3.2.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2019-11-30 +tag: v0.3.2 +--- + +### What's new? + +- Mesheryctl + - Addition of `mesheryctl version` as a new subcommand. + diff --git a/docs/_releases/v0.3.3.md b/docs/_releases/v0.3.3.md new file mode 100644 index 00000000000..c334e1ab4fe --- /dev/null +++ b/docs/_releases/v0.3.3.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2019-12-21 +tag: v0.3.3 +--- + +### What's new? + +- Meshery Server + - Providers - a new project construct that allows users to select authentication, long-term storage, and so on provider. + diff --git a/docs/_releases/v0.3.4.md b/docs/_releases/v0.3.4.md new file mode 100644 index 00000000000..478c0dde8f5 --- /dev/null +++ b/docs/_releases/v0.3.4.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2019-12-30 +tag: v0.3.4 +--- + +### What's new? + +- Mesheryctl + - `mesheryctl version` is now enhanced with the addition of displaying the git commit (sha) of the mesheryctl release. + diff --git a/docs/_releases/v0.3.5.md b/docs/_releases/v0.3.5.md new file mode 100644 index 00000000000..3d9d2c1bd20 --- /dev/null +++ b/docs/_releases/v0.3.5.md @@ -0,0 +1,11 @@ +--- +layout: default +date: 2020-1-13 +tag: v0.3.5 +--- + +### What's new? + +- Mesheryctl + - Removal of `init` as a command exposed to users. This command's functionality is used internal to `mesheryctl start`. A new `start --check` command will provide preflight check functionality in `init`'s place. + diff --git a/docs/_releases/v0.3.6.md b/docs/_releases/v0.3.6.md new file mode 100644 index 00000000000..c8648e2ab54 --- /dev/null +++ b/docs/_releases/v0.3.6.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-1-14 +tag: v0.3.6 +--- + +### What's new? + +- Mesheryctl + - Ad-hoc connectivity tests for Grafana is now supported. Users can click the Grafana chip and have Meshery verify its ability to connect to the configured Grafana instance. + diff --git a/docs/_releases/v0.3.7.md b/docs/_releases/v0.3.7.md new file mode 100644 index 00000000000..8d98045d6d9 --- /dev/null +++ b/docs/_releases/v0.3.7.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-1-15 +tag: v0.3.7 +--- + +### What's new? + +- Meshery Server + - Ad-hoc connectivity tests for Prometheus is now supported. Users can click the Prometheus chip and have Meshery verify its ability to connect to the configured Prometheus instance. + diff --git a/docs/_releases/v0.3.8.md b/docs/_releases/v0.3.8.md new file mode 100644 index 00000000000..3c8e14eeeb4 --- /dev/null +++ b/docs/_releases/v0.3.8.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-1-17 +tag: v0.3.8 +--- + +### What's new? + +- Mesheryctl + - Extraneous command line output removed. Clarity of CLI interaction with `mesheryctl` is improved in this release. + diff --git a/docs/_releases/v0.3.9.md b/docs/_releases/v0.3.9.md new file mode 100644 index 00000000000..9267c05088d --- /dev/null +++ b/docs/_releases/v0.3.9.md @@ -0,0 +1,14 @@ +--- +layout: release +date: 2020-2-2 +tag: v0.3.9 +--- + +### What's new? + +- Mesheryctl + - Addition of `mesheryctl version` to provide server-side version number. + - Improvement of `mesheryctl logs | stop | start` to provide appropriate grammar in situations when Meshery is stopped or Docker is not present. +- Meshery Server + - Strip off extraneous information beyond IP address and port in Grafana and Prometheus endpoints ([#612](https://github.com/layer5io/meshery/issues/612)) + diff --git a/docs/_releases/v0.4.0-beta.1.md b/docs/_releases/v0.4.0-beta.1.md new file mode 100644 index 00000000000..27eec37d841 --- /dev/null +++ b/docs/_releases/v0.4.0-beta.1.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-7-6 +tag: v0.4.0-beta.1 +--- + +### What's new? + +- Meshery + - "stable-latest" tag for new release channel. + diff --git a/docs/_releases/v0.4.0-beta.2.md b/docs/_releases/v0.4.0-beta.2.md new file mode 100644 index 00000000000..7532d4b9be2 --- /dev/null +++ b/docs/_releases/v0.4.0-beta.2.md @@ -0,0 +1,20 @@ +--- +layout: release +date: 2020-7-8 +tag: v0.4.0-beta.2 +--- + +### What's new? + +- Meshery + - Added initial kubeconfig. +- Mesheryctl + - Removed fatal error due to missing `meshery.yaml`. +- Documentation + - Updated Kuma adapter logo in Meshery Docs. + - Added network ports to the adapters table. + - Added providers screenshot. + - Added all supported platforms to list. + - Added nighthawk as a load generator. + - Fixed broken link in EKS page. + diff --git a/docs/_releases/v0.4.0-beta.3.md b/docs/_releases/v0.4.0-beta.3.md new file mode 100644 index 00000000000..1988a467273 --- /dev/null +++ b/docs/_releases/v0.4.0-beta.3.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-7-8 +tag: v0.4.0-beta.3 +--- + +### What's new? + +- Bug Fixes + - Hotfix of bug introduced in Release v0.4.0-beta.2 + diff --git a/docs/_releases/v0.4.0-beta.4.md b/docs/_releases/v0.4.0-beta.4.md new file mode 100644 index 00000000000..040313a8a17 --- /dev/null +++ b/docs/_releases/v0.4.0-beta.4.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-7-9 +tag: v0.4.0-beta.4 +--- + +### What's new? + +- Bug Fixes + - hotfix: Meshery settings page not building + diff --git a/docs/_releases/v0.4.1.md b/docs/_releases/v0.4.1.md new file mode 100644 index 00000000000..c584af8a45d --- /dev/null +++ b/docs/_releases/v0.4.1.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2020-8-8 +tag: v0.04.1 +--- + + +### What's new? + +- Documentation + - Typo and error fixes + diff --git a/docs/_releases/v0.4.10.md b/docs/_releases/v0.4.10.md new file mode 100644 index 00000000000..1978eecf545 --- /dev/null +++ b/docs/_releases/v0.4.10.md @@ -0,0 +1,28 @@ +--- +layout: release +date: 2020-10-3 +tag: v0.4.11 +--- + +### What's new? + +- General + + - fix: go modules conflicts generated by dependabot @kushthedude (#1627) + - Updated the UI for the preferences section @Nikhil-Ladha (#1632) + - Add Meshery Release v0.4.2 to Release page @KarenEfereyan (#1630) + - SMI table Tweaks @dhruv0000 (#1624) + Conforming to Navigation Conformances @dhruv0000 (#1618) + +- Maintenance + + - Bump github.com/sirupsen/logrus from 1.6.0 to 1.7.0 @dependabot-preview (#1621) + - Bump google.golang.org/grpc from 1.31.1 to 1.32.0 @dependabot-preview (#1623) + - Bump fortio.org/fortio from 1.6.8 to 1.8.1 @dependabot-preview (#1620) + - Bump github.com/prometheus/common from 0.13.0 to 0.14.0 @dependabot-preview (#1622) + +- Documentation + + - [Docs] Updated adapter docs @chandrashritii (#1614) + - update meshery architecture diagrams @lolyparty (#1619) + diff --git a/docs/_releases/v0.4.11.md b/docs/_releases/v0.4.11.md new file mode 100644 index 00000000000..f7806e4680b --- /dev/null +++ b/docs/_releases/v0.4.11.md @@ -0,0 +1,16 @@ +--- +layout: release +date: 2020-10-5 +tag: v0.4.11 +--- + + +### What's new? + +- General + + - [mesheryctl] Inform user of latest Meshery server version @leecalcote (#1640) + - Run Conformance Test through CLI @anirudhjain75 (#1554) + - Update README.md @thelovekesh (#1641) + - [Docs] Fixed the upgrade command syntax in the documentation @hexxdump (#1642) + diff --git a/docs/_releases/v0.4.12.md b/docs/_releases/v0.4.12.md new file mode 100644 index 00000000000..d62e2a3c073 --- /dev/null +++ b/docs/_releases/v0.4.12.md @@ -0,0 +1,16 @@ +--- +layout: release +date: 2020-10-8 +tag: v0.4.12 +--- + +### What's new? + +- General + + - Added Release Card to Dashboard @m4tr1k (#1636) + - [Docs] Add UI screenshot to UI Contributor docs @aditya2499 (#1656) + - update Maesh to Traefik Mesh @dannylwe (#1659) + - [Mesheryctl]: Removal of unnecessary line breaks @NupurThakur27 (#1654) + - Fixing the Broken image of Meshery Architecture in README @spielers (#1649) + diff --git a/docs/_releases/v0.4.13.md b/docs/_releases/v0.4.13.md new file mode 100644 index 00000000000..0f1d2e8950e --- /dev/null +++ b/docs/_releases/v0.4.13.md @@ -0,0 +1,14 @@ +--- +layout: release +date: 2020-11-10 +tag: v0.4.13 +--- + +### What's new? + +- General + + - UI: Refine Dashboard @daksh-sagar (#1668) + - Improve meshery contribution flow guide @daksh-sagar (#1667) + - Removing snackbar while fetching results for SMI table @dhruv0000 (#1665) + diff --git a/docs/_releases/v0.4.14.md b/docs/_releases/v0.4.14.md new file mode 100644 index 00000000000..1f2a36c420a --- /dev/null +++ b/docs/_releases/v0.4.14.md @@ -0,0 +1,26 @@ +--- +layout: release +date: 2020-10-20 +tag: v0.4.14 +--- + +### What's new? + +- General + + - Translate contribute guide to docs to spanish @jesuslerma (#1696) + - security: update ui deps to avoid DOS @kushthedude (#1689) + - fix(UI): table filters not rendering due to custom header @dhruv0000 (#1694) + - Updating Istio Documentation, @Maxgit3 (#1683) + - Fetch Grafana Boards after config. @dhruv0000 (#1688) + - [Docs] Installation Guides @chandrashritii (#1673) + - [ImgBot] Optimize images @IMGBOT (#1687) + - [Docs] Update Meshery architecture page @chandrashritii (#1675) + - UI: Remove smi conformance results chip @daksh-sagar (#1686) + - [Docs] Update windows installation guide for Meshery @chandrashritii (#1657) + - Updated 'Kong' -> 'Kuma' @Neilblaze (#1681) + +- Documentation + + - [mesheryctl] Generate cluster access for Minikube clusters @leecalcote (#1672) + diff --git a/docs/_releases/v0.4.15.md b/docs/_releases/v0.4.15.md new file mode 100644 index 00000000000..75c83476483 --- /dev/null +++ b/docs/_releases/v0.4.15.md @@ -0,0 +1,30 @@ +--- +layout: release +date: 2020-10-23 +tag: v0.4.15 +--- + + +### What's new? + +- General + + - Trying to get the signoff check this time @alonsolopezr (#1724) + - Added SMP Logo in ReadMe @Aarush-Goyal (#1648) + - [mesheryctl]Attempt to start docker daemon during mesheryctl installation @hexxdump (#1685) + - Changed lifecycle method for props update @dhruv0000 (#1722) + - fix(UI): Persist Grafana charts after a Reloading @dhruv0000 (#1721) + - [Adapter] Remove NGINX SM Adapter from Stable release channel pending adapter beta release @leecalcote (#1714) + - Add experimental subcommand to mesheryctl @anirudhjain75 (#1715) + - nginx adapter changes without the svgs @kumarabd (#1705) + - [mesheryctl] #1708 version command add indicator to user @cardinalion (#1710) + - [mesheryctl] Fix command provides invalid upgrade prompt #1707 @cardinalion (#1709) + +- Features + + - [Docs] feature update @chandrashritii (#1719) + +- Documentation + + - [Docs] feature update @chandrashritii (#1719) + diff --git a/docs/_releases/v0.4.16.md b/docs/_releases/v0.4.16.md new file mode 100644 index 00000000000..f88d833893b --- /dev/null +++ b/docs/_releases/v0.4.16.md @@ -0,0 +1,32 @@ +--- +layout: release +date: 2020-10-28 +tag: v0.4.16 +--- + +### What's new? + +- General + + - Minor correction of words in the kinD quick start page @alonsolopezr (#1759) + - fix: remove the duplicate function required for version checking @kushthedude (#1767) + - Getting the gke quick start page, translation to es in the docs-pages… @alonsolopezr (#1757) + - [Docs] Translate Project page to Spanish @homero304 (#1740) + - [mesheryctl] Add prerequisite on docker daemon running status @hexxdump (#1746) + - Add latest available version in the API and in the dashboard @utkarsh-pro (#1761) + - enh: populate loadGenerator in SMP results @kushthedude (#1765) + - [ImgBot] Optimize images @IMGBOT (#1764) + - [Docs] Section update @chandrashritii (#1726) + - [Docs] fixes #1748 SVG of Meshery Architecture Diagram @DanRowe1 (#1760) + - Updated WSL link Signed-off-by: Bart Kalanski bkalanski@gmail.com @bartkalanski (#1755) + - Getting the docker quick start page, translation to es in the docs-pa… @alonsolopezr (#1744) + - Getting the aks quick start page, translation to es in the docs/pages… @alonsolopezr (#1741) + - Getting the eks quick start page, translation to es in the docs-pages… @alonsolopezr (#1743) + - [UI] update nginx-sm logo @leecalcote (#1750) + - fixes for remote provider @kumarabd (#1739) + - [Docs] README - Add NGINX Service Mesh adapter @UnkleTayo (#1736) + - reorder menu items in alphabetical order - i1735 @amanda-ariyaratne (#1737) + - generate default mesheryctl config if one doesn't exist or invalid on… @anirudhjain75 (#1693) + - [Fix - #1728] - Replacing the Traefik logo to minimal-version @akashprasher (#1733) + - chore: upgrade nighthawk-go package version @kushthedude (#1732) + diff --git a/docs/_releases/v0.4.17.md b/docs/_releases/v0.4.17.md new file mode 100644 index 00000000000..539a49c1c9f --- /dev/null +++ b/docs/_releases/v0.4.17.md @@ -0,0 +1,25 @@ +--- +layout: release +date: 2020-10-29 +tag: v0.4.17 +--- + +### What's new? + +- General + + - Translation of the kubernetes quick start pageto es, just added this … @alonsolopezr (#1774) + - Getting the kinD quick start page, translation to es in the docs-page… @alonsolopezr (#1758) + - [Docs] update resources page @chandrashritii (#1771) + - Bump the chart version and add mesheryconsul adapter @Aisuko (#1781) + - [provider-ui] - Add Integration test for Provider UI @ramrodo (#1778) + +- Bug Fixes + + - Generate meshery config dir at mesheryctl init @nitishm (#1780) + - fix: ubuntu sh is linked to dash @kushthedude (#1777) + +- Documentation + + - [Docs] Architecture diagrams @leecalcote (#1783) + diff --git a/docs/_releases/v0.4.18.md b/docs/_releases/v0.4.18.md new file mode 100644 index 00000000000..2b886b8f74d --- /dev/null +++ b/docs/_releases/v0.4.18.md @@ -0,0 +1,73 @@ +--- +layout: release +date: 2020-11-08 +tag: v0.4.18 +--- + +### What's new? + +- General + + - Updated version.go @tripathyprateek (#1866) + - [UI] Istio control plane addition to the dashboard @utkarsh-pro (#1868) + - Fixed Broken Link in README @Yashs911 (#1878) + - ui: updated side-nav @chebro (#1867) + - fix: meshery helm chart notes are invalid @kushthedude (#1870) + - [ImgBot] Optimize images @IMGBOT (#1873) + - [Docs] feature-guide-update @chandrashritii (#1869) + - [mesheryctl] Read user consent before starting Docker daemon in PreReqCheck @hexxdump (#1859) + - Add mesh names derived from SMP spec @utkarsh-pro (#1858) + - chore: add html next.js headers @kushthedude (#1864) + - [Docs] Fix search plugin @chandrashritii (#1839) + - [UI] Add test integration for /userpreference @ramrodo (#1853) + - Reordered service mesh names in Management sub-menu @ayushk1804 (#1851) + - translate of the platform page to spanish @alonsolopezr (#1809) + - [Docs] fix broken link @chandrashritii (#1840) + - TraducciΓ³n InstalaciΓ³n en windows @jeojhx (#1790) + - Chore: change release drafter token to use personal pat @karleypetracca (#1807) + - Add alphabetical sorting to the Adapter Operation lists @utkarsh-pro (#1806) + - feat: add lint staged @Tanuj22 (#1805) + - chore: restore nginx-adapter in compose.yaml @kushthedude (#1796) + - mesheryctl installation instructructions for Brew #1785 @abhishekkumkar (#1794) + - Translation of the minikube quick start page to es. @alonsolopezr (#1775) + - [FIX - #1772] Missing Images in Documentation Overview Section @akashprasher (#1786) + +- Features + + - feat: add AKS support in mesheryctl @kushthedude (#1874) + - fix: system status gives empty output if meshery is not running @kushthedude (#1812) + +- Maintenance + + - Bump react-lazyload from 2.6.8 to 3.1.0 in /ui @dependabot-preview (#1848) + - Bump react from 16.13.1 to 16.14.0 in /provider-ui @dependabot-preview (#1829) + - Bump next from 9.3.6 to 10.0.0 in /provider-ui @dependabot-preview (#1832) + - Bump next from 9.3.6 to 10.0.1 in /ui @dependabot-preview (#1857) + - Bump react-redux from 6.0.1 to 7.2.2 in /ui @dependabot-preview (#1818) + - Bump codemirror from 5.56.0 to 5.58.2 in /ui @dependabot-preview (#1846) + - Bump eslint-plugin-import from 2.22.0 to 2.22.1 in /ui @dependabot-preview (#1849) + - Bump mui-datatables from 3.3.1 to 3.6.0 in /ui @dependabot-preview (#1847) + - Bump @babel/types from 7.11.0 to 7.12.1 in /ui @dependabot-preview (#1845) + - Bump react-moment from 0.8.4 to 1.0.0 in /ui @dependabot-preview (#1843) + - Bump @fortawesome/react-fontawesome from 0.1.11 to 0.1.12 in /ui @dependabot-preview (#1842) + - Bump github.com/layer5io/service-mesh-performance from 0.2.1 to 0.3.1 @dependabot-preview (#1841) + - Bump start-server-and-test from 1.11.2 to 1.11.5 in /provider-ui @dependabot-preview (#1831) + - Bump lint-staged from 10.5.0 to 10.5.1 in /ui @dependabot-preview (#1828) + - Bump isomorphic-unfetch from 3.0.0 to 3.1.0 in /ui @dependabot-preview (#1827) + - Bump @fortawesome/free-solid-svg-icons from 5.14.0 to 5.15.1 in /ui @dependabot-preview (#1825) + - Bump eslint-plugin-react-hooks from 4.0.8 to 4.2.0 in /ui @dependabot-preview (#1820) + - Bump @date-io/moment from 1.3.13 to 2.10.6 in /ui @dependabot-preview (#1822) + - Bump jsonlint-mod from 1.7.5 to 1.7.6 in /ui @dependabot-preview (#1819) + - Bump cypress from 5.4.0 to 5.5.0 in /provider-ui @dependabot-preview (#1830) + - Bump nodemon from 2.0.4 to 2.0.6 in /provider-ui @dependabot-preview (#1826) + - Bump moment from 2.27.0 to 2.29.1 in /ui @dependabot-preview (#1824) + - Bump eslint-plugin-react from 7.20.5 to 7.21.5 in /ui @dependabot-preview (#1823) + - Bump nodemon from 2.0.4 to 2.0.6 in /ui @dependabot-preview (#1821) + - Bump google.golang.org/grpc from 1.32.0 to 1.33.1 @dependabot-preview (#1817) + - Bump github.com/prometheus/client_golang from 1.7.1 to 1.8.0 @dependabot-preview (#1815) + - Bump github.com/golang/protobuf from 1.4.2 to 1.4.3 @dependabot-preview (#1813) + - Bump fortio.org/fortio from 1.8.1 to 1.11.0 @dependabot-preview (#1816) + - Bump eslint-plugin-react from 7.20.5 to 7.21.5 in /provider-ui @dependabot-preview (#1833) + - Bump isomorphic-unfetch from 3.0.0 to 3.1.0 in /provider-ui @dependabot-preview (#1835) + - Bump eslint from 7.6.0 to 7.12.1 in /provider-ui @dependabot-preview (#1834) + diff --git a/docs/_releases/v0.4.19.md b/docs/_releases/v0.4.19.md new file mode 100644 index 00000000000..5685e034dbd --- /dev/null +++ b/docs/_releases/v0.4.19.md @@ -0,0 +1,28 @@ +--- +layout: release +date: 2020-11-10 +tag: v0.4.19 +--- + +### What's new? + +- General + + - Add meshery-kuma @Aisuko (#1854) + - Add the meshery-osm chart @Aisuko (#1802) + - Add support for linkerd in the dashboard service mesh view @utkarsh-pro (#1881) + - Add permission to watch the nodes @Aisuko (#1893) + - add shell completion command @WLun001 (#1877) + +- Bug Fixes + + - fix: bash script to utilise dynamic input @kushthedude (#1875) + +- Maintenance + + - [UI] Add e2e test for /userpreference @ramrodo (#1862) + +- Documentation + + - Docs: add AKS installation instructions for Meshery @kushthedude (#1871) + diff --git a/docs/_releases/v0.4.2.md b/docs/_releases/v0.4.2.md new file mode 100644 index 00000000000..b9f4d6f47ab --- /dev/null +++ b/docs/_releases/v0.4.2.md @@ -0,0 +1,40 @@ +--- +layout: release +date: 2020-8-17 +tag: v0.4.2 +--- + +### What's new? + +- Features + + - Update CRUD operations on test config + - Fix for unwanted snackbar in perf preferences tab + - Add validation for protocol in URL + - Initialize OSM adapter for Meshery + - Add new command restart to mesheryctl + +- Maintenance + + - Fix broken ci for ui tests + - Optimize images + - Remove redundant step from docker push + +- Documentation + + - Remove broken links from table of supported platforms + - Remove example of brew upgrade mesheryctl output + - Create smi-conformance-capability.md file + - Fix documentation site broken links + - Fix broken link to SMP in release.md + - Upgrade Meshery Kuma Adapter to beta + - Update adapter docs + - Add logos to assets folder + - Add Open Service Mesh to list + - Fix typo error in App Mesh Adapter description + +- Bug Fixes + - Create/Delete/Read on user test profiles + - Fix for the results page + - Fix releaseDrafter configuration file + diff --git a/docs/_releases/v0.4.20.md b/docs/_releases/v0.4.20.md new file mode 100644 index 00000000000..a7b6954bf01 --- /dev/null +++ b/docs/_releases/v0.4.20.md @@ -0,0 +1,37 @@ +--- +layout: release +date: 2020-12-11 +tag: v0.4.20 +--- + +### What's new? + +- General + + - Overview page spanish translation @Drake8710 (#1742) + - Ccoss2020 fixes1803 @Drake8710 (#1804) + - Add partial translation of functionality section @jlcastrogro (#1793) + - Add meshery adaptor chart for networking service mesh @Aisuko (#1900) + - Add service mesh control plane dashboard for Consul, OSM, NSM, Citrix @utkarsh-pro (#1902) + - Revert "add new mesheryctl command" @kumarabd (#1910) + - add new mesheryctl command @chandrashritii (#1908) + - Updated 'Signed Commits' URL in PR_Template #1905 @Aniruddha-Shriwant (#1906) + - [Docs] Add lightbox plugin @chandrashritii (#1903) + - [provider-ui] Add e2e test to provider-ui to test modal @ramrodo (#1901) + +- Maintenance + + - Bump @fortawesome/fontawesome-svg-core from 1.2.30 to 1.2.32 in /ui @dependabot-preview (#1888) + - Bump notistack from 0.8.9 to 1.0.1 in /ui @dependabot-preview (#1850) + - Bump react-dom from 16.13.1 to 16.14.0 in /provider-ui @dependabot-preview (#1884) + - Bump mui-datatables from 3.6.0 to 3.7.1 in /ui @dependabot-preview (#1883) + - Bump @fortawesome/free-regular-svg-icons from 5.14.0 to 5.15.1 in /ui @dependabot-preview (#1885) + - Bump billboard.js from 1.11.0 to 2.1.3 in /ui @dependabot-preview (#1887) + - Bump @babel/traverse from 7.9.6 to 7.12.5 in /ui @dependabot-preview (#1892) + - Bump caniuse-lite from 1.0.30001109 to 1.0.30001157 in /ui @dependabot-preview (#1891) + - Bump @fortawesome/free-brands-svg-icons from 5.14.0 to 5.15.1 in /ui @dependabot-preview (#1889) + - Bump react-jss from 10.3.0 to 10.4.0 in /ui @dependabot-preview (#1890) + - Bump eslint-plugin-jsx-a11y from 6.3.1 to 6.4.1 in /ui @dependabot-preview (#1886) + - Bump eslint from 7.12.1 to 7.13.0 in /provider-ui @dependabot-preview (#1882) + - chore: meshery workflow fires up on release @kushthedude (#1898) + diff --git a/docs/_releases/v0.4.21.md b/docs/_releases/v0.4.21.md new file mode 100644 index 00000000000..a1c366e20bf --- /dev/null +++ b/docs/_releases/v0.4.21.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2020-11-12 +tag: v0.4.21 +--- + +### What's new? + +- General + + - [UI] revert to older mui-datatables library @leecalcote (#1916) + diff --git a/docs/_releases/v0.4.22.md b/docs/_releases/v0.4.22.md new file mode 100644 index 00000000000..652714fe566 --- /dev/null +++ b/docs/_releases/v0.4.22.md @@ -0,0 +1,11 @@ +--- +layout: release +date: 2020-11-12 +tag: v0.4.22 +--- + +### What's new? + +- General + + - UI package dependency updates diff --git a/docs/_releases/v0.4.3.md b/docs/_releases/v0.4.3.md new file mode 100644 index 00000000000..31ae4f5b40e --- /dev/null +++ b/docs/_releases/v0.4.3.md @@ -0,0 +1,26 @@ +--- +layout: release +date: 2020-8-22 +tag: v0.4.3 +--- + +### What's new? + +- Features + + - Use Open Service Mesh in place of osm + - Duration field use dropdown + text in performance preference + - Added tooltips for navigation menu items while in minimised state + - Added community calendar button + +- Documentation + + - Doc pages fixed + - Updated README.md + - Added first timers' and welcome guide link + - Added "Open Service Mesh" to navigation menu in Meshery docs + +- Bug fixes + - smi-conformance - added Colons to front matter + - Missing bottom row added + diff --git a/docs/_releases/v0.4.4.md b/docs/_releases/v0.4.4.md new file mode 100644 index 00000000000..bcaadbfab4b --- /dev/null +++ b/docs/_releases/v0.4.4.md @@ -0,0 +1,31 @@ +--- +layout: release +date: 2020-8-27 +tag: v0.4.4 +--- + +### What's new? + +- Features + + - Added timeout in golang-ci lint + - Moved to Gorilla/mux for server routing + - Migrated to golangci-lint + - Initialised nighthawk load generator interface + +- Maintenance + + - Updated meshmap branch to latest on master branch + - Made page heading title bold + - Moved meshery adapter for osm + +- Documentation + + - Added extra RVM notes for Windows Users + - Added SMI screenshot and description + - Added the current version of osm + +- Bug fixes + - Auto detecting kube configuration + - Fixed the footer social bar + diff --git a/docs/_releases/v0.4.5.md b/docs/_releases/v0.4.5.md new file mode 100644 index 00000000000..31f647b759d --- /dev/null +++ b/docs/_releases/v0.4.5.md @@ -0,0 +1,32 @@ +--- +layout: release +date: 2020-9-2 +tag: v0.4.5 +--- + +### What's new? + +- General + + - [ImgBot] Optimize images @IMGBOT (#1514) + - added kuma service mesh @kumarabd (#1473) + - ADDED SAMPLE APPLICATION @was-coder (#1511) + - Updated citrix adapter to reflect supported operations" @KarenEfereyan (#1513) + - Sample application edited @was-coder (#1503) + - Udoka vrede branch @UdokaVrede (#1500) + - Added SMI conformance capability as a feature to KUMA adapter" @KarenEfereyan (#1492) + - Update README.mb @NorbertLuszkiewicz (#1480) + #1476 @7daytheory (#1478) + - fix wsl 404s @thegagne (#1497) + - Added the Correct Slack link in contributing.md @akashgp09 (#1484) + - removed 'common issues' heading and fixed typo @tim-hanke (#1477) + - Merge master into meshmap @kushthedude (#1472) + +- Maintenance + + - Bump github.com/gorilla/mux from 1.7.4 to 1.8.0 @dependabot-preview (#1508) + - Bump google.golang.org/grpc from 1.31.0 to 1.31.1 @dependabot-preview (#1507) + - Bump fortio.org/fortio from 1.6.4 to 1.6.8 @dependabot-preview (#1509) + - Bump github.com/prometheus/common from 0.10.0 to 0.13.0 @dependabot-preview (#1506) + - CI: improvise actions executed & remove tool configs @kushthedude (#1494) + diff --git a/docs/_releases/v0.4.6.md b/docs/_releases/v0.4.6.md new file mode 100644 index 00000000000..5cb5883cbbb --- /dev/null +++ b/docs/_releases/v0.4.6.md @@ -0,0 +1,20 @@ +--- +layout: release +date: 2020-9-3 +tag: v0.4.6 +--- + +### What's new? + +- General + + - fixed bug for kuma adaptor @kumarabd (#1523) + - Docs/nupurthakur27/966 @NupurThakur27 (#1517) + - Kumarabd/bug/smi chip @kumarabd (#1520) + - ADDED SMI CONFORMANCE FEATURE @was-coder (#1518) + - feat: close drawer after clear all notification @PmcFizz (#1515) + +- Features + + - feat: Add pre-commit hook for lint @kushthedude (#1107) + diff --git a/docs/_releases/v0.4.7.md b/docs/_releases/v0.4.7.md new file mode 100644 index 00000000000..60c46783ce5 --- /dev/null +++ b/docs/_releases/v0.4.7.md @@ -0,0 +1,63 @@ +--- +layout: release +date: 2020-9-25 +tag: v0.4.7 +--- + +### What's new? + +- General + + - Fix some frond-end console waring @PmcFizz (#1596) + - Improve URL matching regex pattern. @shubhamgupta2956 (#1583) + - fixed the iframe @jomefavourite (#1550) + - Update osm port @ratatatCat (#1565) + - enh: add autolabeller action @kushthedude (#1573) + - [docs]Update Meshery Contributing Doc @Harshita-Kanal (#1567) + - fix: labeler config file @kushthedude (#1560) + - [CI] Update PR labeler config @leecalcote (#1559) + - [CI] PR Labeler test with docs update @leecalcote (#1558) + - [meshery]: chore / smps to smp @kalradev (#1555) + - [Docs] fixed broken hyperlink in README @Gregxd11 (#1546) + - Updated reserved network port from 10009 to 10010 @guacamole (#1545) + - Added supported operations for CPX adapter under heading "Sample Appl… @KarenEfereyan (#1535) + - β€œAdd Load Generators Description ” @Annysah (#1533) + - include supported operations @lolyparty (#1534) + +- Features + + - feat: package nighthawk with meshery @kushthedude (#1601) + - feat: complete nighthawk integration with meshery @kushthedude (#1505) + - Add Consul Service mesh adaptor options to helm chart @nicholasjackson (#1568) + - CI: establish edge release channel @kushthedude (#1570) + - feat: add deployment yamls for meshery-kuma adapter @kushthedude (#1539) + +- Bug Fixes + + - fix: welcome bot configuration @kushthedude (#1592) + - fix: docker build arguement missing @kushthedude (#1575) + - Fix: build and release pipelines of Meshery @kushthedude (#1572) + - fix: k8s deployment for osm @kushthedude (#1525) + +- Maintenance + + - fix: welcome bot configuration @kushthedude (#1592) + - CI: establish edge release channel @kushthedude (#1570) + +- Documentation + + - Kumarabd/feature/smi test persistence @kumarabd (#1578) + - added release notes v0.4.3 @anshdhinhgra47 (#1600) + - READ-ME Updated with 4.1 release notes @accordingtoherr (#1595) + - added missing windows installation steps @abiodunolunu (#1587) + - docs: remove the deprecated make action @kushthedude (#1586) + - Add SMI Conformance capability to Istio Adapter @KarenEfereyan (#1582) + - Added network port for Learn Layer5 in docs @KarenEfereyan (#1581) + - Changed OSM network port from 10010 to 10009 @KarenEfereyan (#1580) + - Replace hardcoded docs url with a constant. @Sylfrena (#1496) + - Removed reverse order from Meshery functionality page @KarenEfereyan (#1563) + - [Docs] general documentation fixes for adapters @chandrashritii (#1536) + - Docs: Added the supported operation for the meshery adapter for Tanzu @Kennygrace (#1532) + - updated Consul version to 1.8 and removed sentence SMI adapter for ku… @Rex739 (#1526) + - docs: Improve the readability of the table in readme.md @NorbertLuszkiewicz (#1531) + diff --git a/docs/_releases/v0.4.8.md b/docs/_releases/v0.4.8.md new file mode 100644 index 00000000000..33548477ccc --- /dev/null +++ b/docs/_releases/v0.4.8.md @@ -0,0 +1,16 @@ +--- +layout: release +date: 2020-9-28 +tag: v0.4.8 +--- + +### What's new? + +- General + + - Fixed broken image Signed-off-by: Bart Kalanski bkalanski@gmail.com @bartkalanski (#1609) + +- Documentation + + - Meshery releases documentation update w/ sign off @bartkalanski (#1607) + diff --git a/docs/_releases/v0.4.9.md b/docs/_releases/v0.4.9.md new file mode 100644 index 00000000000..7787e5e7976 --- /dev/null +++ b/docs/_releases/v0.4.9.md @@ -0,0 +1,12 @@ +--- +layout: release +date: 2020-9-30 +tag: v0.4.9 +--- + +### What's new? + +- Hotfix + + - hotfix: comment out nighthawk container @kushthedude (#1617) + diff --git a/docs/assets/css/adapters.scss b/docs/_sass/adapters.scss similarity index 70% rename from docs/assets/css/adapters.scss rename to docs/_sass/adapters.scss index 276306854ef..b9553238ecf 100644 --- a/docs/assets/css/adapters.scss +++ b/docs/_sass/adapters.scss @@ -1,7 +1,25 @@ // Meshery Colors -$coolgray: #3C494F; +$charcoal: #3C494F; +$tealblue: #477E96; $lightgreen: #00D3A9; $darkgreen: #00B39F; +$darkyellow: #ebc017; +$lightyellow: #e9c46a; + +.l5-dark-yellow { + background-color: $darkyellow !important; +} + +.l5-dark-yellow-text { + color: $darkyellow !important; +} + +.l5-light-yellow { + background-color: $lightyellow !important; + +.l5-light-yellow-text { + color: $lightyellow !important; +} table.adapters { box-shadow: 1px 1px 2px grey; @@ -35,7 +53,7 @@ table.adapters { td.stable-adapters { width: auto; - background-color: $coolgray; + background-color: $charcoal; text-align: center; color: #fff; } @@ -50,5 +68,5 @@ table.adapters { height: 30px; width: 30px; } - -} + } +} \ No newline at end of file diff --git a/docs/_sass/clipboard.scss b/docs/_sass/clipboard.scss new file mode 100644 index 00000000000..0a70369ad13 --- /dev/null +++ b/docs/_sass/clipboard.scss @@ -0,0 +1,52 @@ +pre.codeblock-pre { + display: inline-flex; + justify-content: left; + text-align: left; + align-items: left; + align-content: left; + flex-wrap: nowrap; + flex-direction: row; + background-color: #111; + margin: 0; + padding: 10px; + border-radius: 0.3rem; + width: 100%; +} + +.codeblock { + width: 100%; + display: inline-flex; + overflow: auto; + justify-content: left; + color: #ddd; + margin: 0px; + padding: 0px; +} + +.clipboardjs { + display: inline-flex; + align-self: flex-end; + justify-content: left; + width: 100%; + overflow-x: auto; + padding: 0px; + margin: 0px; +} + +.btn-copy-wrap { + + align-content: flex-end; +} + +.clipbtn { + margin: 5px; + border: 0px; + background-color: transparent; + color: #ccc; + font-size: 1.2rem; +} + +.clipbtn:hover { + color: #fff; + cursor: pointer; +} diff --git a/docs/_sass/installation.scss b/docs/_sass/installation.scss new file mode 100644 index 00000000000..f27196409e0 --- /dev/null +++ b/docs/_sass/installation.scss @@ -0,0 +1,11 @@ +div.prereqs { + background-color: $charcoal;; + color: #ddd; + margin: 20px; + padding: 15px; + border-radius: 0.3rem; + +} +a.meshery-light { + color: $keppel; +} \ No newline at end of file diff --git a/docs/_sass/tables.scss b/docs/_sass/tables.scss new file mode 100644 index 00000000000..c7d708c7d87 --- /dev/null +++ b/docs/_sass/tables.scss @@ -0,0 +1,10 @@ +table.mesherycomponents { + th { + background-color: $charcoal; + color:white; + } + td.childcomponent { + color:white; + background-color: $tealblue; + } +} \ No newline at end of file diff --git a/docs/assets/css/lightbox.css b/docs/assets/css/lightbox.css new file mode 100644 index 00000000000..fbbd02c7da3 --- /dev/null +++ b/docs/assets/css/lightbox.css @@ -0,0 +1,94 @@ +#lightbox {width: 100%; padding-top:10px; padding-bottom:10px; height: 100%; position: fixed; top: 0; left: 0; background: rgba(0,0,0,0.85); z-index: 9999999; line-height: 0; cursor: pointer; display: none;} +#lightbox .img { + position: relative; + top: 50%; + left: 50%; + -ms-transform: translateX(-50%) translateY(-50%); + -webkit-transform: translate(-50%,-50%); + transform: translate(-50%,-50%); + max-width: 100%; + max-height: 100%; +} +#lightbox .img img {opacity: 0; pointer-events: none; width: auto;} +@media screen and (min-width: 1200px) { + #lightbox .img { + max-width: 1200px; + } +} +@media screen and (min-height: 1200px) { + #lightbox .img { + max-height: 1200px; + } +} +#lightbox span {display: block; background-position: center; background-repeat: no-repeat; background-size: contain; position: fixed; bottom: 13px; height: 1.5em; line-height: 1.4em; width: 100%; text-align: center; color: white; text-shadow: + -1px -1px 0 #000, + 1px -1px 0 #000, + -1px 1px 0 #000, + 1px 1px 0 #000; +} + +#lightbox span {display: none;} + +#lightbox .videoWrapperContainer { + position: relative; + top: 50%; + left: 50%; + -ms-transform: translateX(-50%) translateY(-50%); + -webkit-transform: translate(-50%,-50%); + transform: translate(-50%,-50%); + max-width: 900px; + max-height: 100%; +} +#lightbox .videoWrapperContainer .videoWrapper { + height: 0; + line-height: 0; + margin: 0; + padding: 0; + position: relative; + padding-bottom: 56.333%; /* custom */ + background: black; +} +#lightbox .videoWrapper iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; + display: block; +} +#lightbox #prev, #lightbox #next {height: 50px; line-height: 36px; display: none; margin-top: -25px; position: fixed; top: 50%; padding: 0 15px; cursor: pointer; text-decoration: none; z-index: 99; color: white; font-size: 60px;} +#lightbox.gallery #prev, #lightbox.gallery #next {display: block;} +#lightbox #prev {left: 0;} +#lightbox #next {right: 0;} +#lightbox #close {height: 50px; width: 50px; position: fixed; cursor: pointer; text-decoration: none; z-index: 99; right: 0; top: 0;} +#lightbox #close:after, #lightbox #close:before {position: absolute; margin-top: 22px; margin-left: 14px; content: ""; height: 3px; background: white; width: 23px; +-webkit-transform-origin: 50% 50%; +-moz-transform-origin: 50% 50%; +-o-transform-origin: 50% 50%; +transform-origin: 50% 50%; +/* Safari */ +-webkit-transform: rotate(-45deg); +/* Firefox */ +-moz-transform: rotate(-45deg); +/* IE */ +-ms-transform: rotate(-45deg); +/* Opera */ +-o-transform: rotate(-45deg); +} +#lightbox #close:after { +/* Safari */ +-webkit-transform: rotate(45deg); +/* Firefox */ +-moz-transform: rotate(45deg); +/* IE */ +-ms-transform: rotate(45deg); +/* Opera */ +-o-transform: rotate(45deg); +} +#lightbox, #lightbox * { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} \ No newline at end of file diff --git a/docs/assets/css/main.css b/docs/assets/css/main.css index 2d898ee4f03..73c683cc53e 100644 --- a/docs/assets/css/main.css +++ b/docs/assets/css/main.css @@ -92,6 +92,17 @@ excluded_in_search: true vertical-align: middle; } +.toggle-button { + border: 1px solid rgba(0, 0, 0, .26); + border-radius: 5px; + margin-left: 0.4rem; +} + +.toggle-button:hover { + background-color: rgb(44, 164, 243); + } + + /*!* Bootstrap v4.1.3 (https://getbootstrap.com/) * Copyright 2011-2018 The Bootstrap Authors @@ -187,18 +198,8 @@ hr { overflow: visible } -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: .5rem -} - p { - margin-top: 0; + margin-top: .25rem; margin-bottom: 1rem } @@ -275,15 +276,16 @@ sup { } a { - color: #3176d9; + color: #00B39F; text-decoration: none; background-color: transparent; -webkit-text-decoration-skip: objects } a:hover { - color: #1e53a0; - text-decoration: none + /* color: #00b39f; */ + font-weight: normal; + text-decoration: underline; } a:not([href]):not([tabindex]) { @@ -476,22 +478,14 @@ template { display: none!important } -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, +h1,h2,h3,h4,h5,h6,.h1,.h2,.h3, .h4, .h5, .h6 { margin-bottom: .5rem; + margin-top: .9rem; font-family: inherit; font-weight: 500; - line-height: 1.2; color: inherit } @@ -10628,6 +10622,10 @@ a.text-dark:focus { color: #888!important } +.text-black { + color: rgba(0, 0, 0, 1)!important +} + .text-black-50 { color: rgba(0, 0, 0, .5)!important } @@ -18110,17 +18108,20 @@ html body .md-typeset .headerlink { } .td-sidebar-nav .td-sidebar-link { + color: #696969; + font-weight: 500; display: block; padding-bottom: .375rem } .td-sidebar-nav .td-sidebar-link__page { - color: #495057; - font-weight: 300 + color: #696969; + font-weight: 370 } .td-sidebar-nav a:hover { - color: #72a1e5; + color: #00b39f; + font-weight: bold; text-decoration: none } @@ -18607,13 +18608,19 @@ footer { visibility: hidden } h2[id]:before, - h3[id]:before, h4[id]:before, h5[id]:before { display: block; content: " "; - margin-top: -5rem; - height: 5rem; + margin-top: -1.5em; + height: 1rem; + visibility: hidden; + } + h3[id]:before { + display: block; + content: " "; + margin-top: -1.25em; + height: 1rem; visibility: hidden } } @@ -18686,4 +18693,133 @@ footer { color: #2496ed; } +#compatibility-table{ + border-collapse: collapse; +} + +#compatibility-table td, #compatibility-table th { + border: 1px solid #ddd; + padding: 8px; + } + + #compatibility-table tr:nth-child(even){background-color: #f2f2f2;} + + #compatibility-table tr:hover {background-color: #ddd;} + + #compatibility-table th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #477E96; + color: white; + } + /*pop-out hidden div*/ + + #hiddendiv { + width: 85%; + padding: 25px 0; + padding-left: 15px; + text-align: left; + font-weight: bold; + background: rgba(5, 165, 146, 0.3); + margin-top: 10px; + display: none; + } + +#post h1, #post h2, #post h3, #post h4 { + color: gray; + padding-top: 10px; +} + +#post h5 { + background: none repeat scroll 0% 0% #3c494f; + font-size: 14px; + font-weight: bold; + padding: 10px 15px; + margin-bottom: 0px; + border-radius: 3px 3px 0px 0px; +} + +/*image-thumbnail-grid*/ + +.row { + display: flex; + } + +.column { + flex: 25.00%; + padding: 5px; + } + +/*thumbnail image*/ +.img-thumbnail { + border: 1px solid #ddd; + padding: 5px; + max-width:calc(25.00% - 20px); + min-height: 150px; + vertical-align: top; + display: inline-block; + text-align: center; + } + +.img-thumbnail:hover { + box-shadow: 0 0 2px 1px rgba(71, 126, 150, 0.5); + } + +.caption { + display: block; + font-weight: bold; +} + +/*page styling will be extracted out to another file*/ +/*button style*/ +div.overview { + display:flex; + text-align: center; + /* position:relative;float:left; */ + /* background-color:#ebc017; */ + background: rgb(60,73,79); + background: linear-gradient(337deg, rgba(60,73,79,1) 0%, rgba(0,179,159,0.861782212885154) 87%); + color: #fff; + font-size: 1.75em; + padding: 40px; + margin: 10px; + width: auto; + /* width: calc(100% / 3.4); */ + overflow-wrap: break-word; + border-radius: 2rem; + justify-content:space-evenly; + align-content: stretch; +} + +div.wrapper { + width: 100%; + text-align: justify; + display: flex; + -ms-flex-align: center; + justify-content:space-evenly; + align-content: stretch; + margin: auto; +} + +div.overview:hover { + background: linear-gradient(337deg, rgba(60,73,79,1) 0%, rgba(0,179,159,0.861782212885154) 92%); + color: #eee; +} + +@media (max-width: 825px) { + div.wrapper { + display: block; + } + div.overview { + margin-left:20%; + margin-right:20%; + } +} + +/*image align-right*/ +.image-right { + float: right; + padding-right: 10px; +} diff --git a/docs/assets/css/sass.scss b/docs/assets/css/sass.scss new file mode 100644 index 00000000000..e689ba2802f --- /dev/null +++ b/docs/assets/css/sass.scss @@ -0,0 +1,13 @@ +--- +# Collect all Sass +--- + +$darkjunglegreen: #1E2117; +$charcoal: #3C494F; +$keppel: #00b39f; +$caribbeangreen: #00d3a9; + +@import "adapters"; +@import "clipboard"; +@import "installation"; +@import "tables" \ No newline at end of file diff --git a/docs/assets/img/adapters/citrix/citrix-adapter.png b/docs/assets/img/adapters/citrix/citrix-adapter.png new file mode 100644 index 00000000000..f8ea9a66d8d Binary files /dev/null and b/docs/assets/img/adapters/citrix/citrix-adapter.png differ diff --git a/docs/assets/img/adapters/citrix/citrix-install.png b/docs/assets/img/adapters/citrix/citrix-install.png new file mode 100644 index 00000000000..b7d40a969c2 Binary files /dev/null and b/docs/assets/img/adapters/citrix/citrix-install.png differ diff --git a/docs/assets/img/adapters/consul/consul-adapter.png b/docs/assets/img/adapters/consul/consul-adapter.png new file mode 100644 index 00000000000..f3f786316b3 Binary files /dev/null and b/docs/assets/img/adapters/consul/consul-adapter.png differ diff --git a/docs/assets/img/adapters/consul/consul-imagehub-success.png b/docs/assets/img/adapters/consul/consul-imagehub-success.png new file mode 100644 index 00000000000..2db92f99e5b Binary files /dev/null and b/docs/assets/img/adapters/consul/consul-imagehub-success.png differ diff --git a/docs/assets/img/adapters/consul/consul-install.png b/docs/assets/img/adapters/consul/consul-install.png new file mode 100644 index 00000000000..eed6c740503 Binary files /dev/null and b/docs/assets/img/adapters/consul/consul-install.png differ diff --git a/docs/assets/img/adapters/consul/consul-sample-app.png b/docs/assets/img/adapters/consul/consul-sample-app.png new file mode 100644 index 00000000000..5ec6a40d6bd Binary files /dev/null and b/docs/assets/img/adapters/consul/consul-sample-app.png differ diff --git a/docs/assets/img/adapters/istio/istio-adapter.png b/docs/assets/img/adapters/istio/istio-adapter.png new file mode 100644 index 00000000000..0dd3fc9e9b5 Binary files /dev/null and b/docs/assets/img/adapters/istio/istio-adapter.png differ diff --git a/docs/assets/img/adapters/istio/istio-install.png b/docs/assets/img/adapters/istio/istio-install.png new file mode 100644 index 00000000000..5ef2cb854e8 Binary files /dev/null and b/docs/assets/img/adapters/istio/istio-install.png differ diff --git a/docs/assets/img/adapters/kuma/kuma-adapter.png b/docs/assets/img/adapters/kuma/kuma-adapter.png new file mode 100644 index 00000000000..47406e0e625 Binary files /dev/null and b/docs/assets/img/adapters/kuma/kuma-adapter.png differ diff --git a/docs/assets/img/adapters/kuma/kuma-install.png b/docs/assets/img/adapters/kuma/kuma-install.png new file mode 100644 index 00000000000..beb6f700ff3 Binary files /dev/null and b/docs/assets/img/adapters/kuma/kuma-install.png differ diff --git a/docs/assets/img/adapters/linkerd/linkerd-adapter.png b/docs/assets/img/adapters/linkerd/linkerd-adapter.png new file mode 100644 index 00000000000..39ee9a397a7 Binary files /dev/null and b/docs/assets/img/adapters/linkerd/linkerd-adapter.png differ diff --git a/docs/assets/img/adapters/linkerd/linkerd-deploy.png b/docs/assets/img/adapters/linkerd/linkerd-deploy.png new file mode 100644 index 00000000000..65f0717359b Binary files /dev/null and b/docs/assets/img/adapters/linkerd/linkerd-deploy.png differ diff --git a/docs/assets/img/adapters/linkerd/linkerd-install.png b/docs/assets/img/adapters/linkerd/linkerd-install.png new file mode 100644 index 00000000000..689a9652a7d Binary files /dev/null and b/docs/assets/img/adapters/linkerd/linkerd-install.png differ diff --git a/docs/assets/img/adapters/linkerd/linkerd-sample-app.png b/docs/assets/img/adapters/linkerd/linkerd-sample-app.png new file mode 100644 index 00000000000..0d3abea88dc Binary files /dev/null and b/docs/assets/img/adapters/linkerd/linkerd-sample-app.png differ diff --git a/docs/assets/img/adapters/meshery-settings.png b/docs/assets/img/adapters/meshery-settings.png new file mode 100644 index 00000000000..bd9e137de6d Binary files /dev/null and b/docs/assets/img/adapters/meshery-settings.png differ diff --git a/docs/assets/img/adapters/meshery-ui-setup.mp4 b/docs/assets/img/adapters/meshery-ui-setup.mp4 new file mode 100644 index 00000000000..e8e2fa0c7d2 Binary files /dev/null and b/docs/assets/img/adapters/meshery-ui-setup.mp4 differ diff --git a/docs/assets/img/adapters/meshery-ui.png b/docs/assets/img/adapters/meshery-ui.png new file mode 100644 index 00000000000..7e2c915cc88 Binary files /dev/null and b/docs/assets/img/adapters/meshery-ui.png differ diff --git a/docs/assets/img/adapters/nsm/nsm-adapter.png b/docs/assets/img/adapters/nsm/nsm-adapter.png new file mode 100644 index 00000000000..2e2286ebc8f Binary files /dev/null and b/docs/assets/img/adapters/nsm/nsm-adapter.png differ diff --git a/docs/assets/img/adapters/nsm/nsm-install.png b/docs/assets/img/adapters/nsm/nsm-install.png new file mode 100644 index 00000000000..0fe209d07e8 Binary files /dev/null and b/docs/assets/img/adapters/nsm/nsm-install.png differ diff --git a/docs/assets/img/adapters/octarine/octarine-adapter.png b/docs/assets/img/adapters/octarine/octarine-adapter.png new file mode 100644 index 00000000000..de609a922a2 Binary files /dev/null and b/docs/assets/img/adapters/octarine/octarine-adapter.png differ diff --git a/docs/assets/img/adapters/octarine/octarine-install.png b/docs/assets/img/adapters/octarine/octarine-install.png new file mode 100644 index 00000000000..eeed948d2d3 Binary files /dev/null and b/docs/assets/img/adapters/octarine/octarine-install.png differ diff --git a/docs/assets/img/adapters/osm/osm-adapter.png b/docs/assets/img/adapters/osm/osm-adapter.png new file mode 100644 index 00000000000..1fa3d5ce67c Binary files /dev/null and b/docs/assets/img/adapters/osm/osm-adapter.png differ diff --git a/docs/assets/img/adapters/osm/osm-install.png b/docs/assets/img/adapters/osm/osm-install.png new file mode 100644 index 00000000000..4b4b0eab0bd Binary files /dev/null and b/docs/assets/img/adapters/osm/osm-install.png differ diff --git a/docs/assets/img/adapters/sample-apps/bookinfo.png b/docs/assets/img/adapters/sample-apps/bookinfo.png new file mode 100644 index 00000000000..92604c54729 Binary files /dev/null and b/docs/assets/img/adapters/sample-apps/bookinfo.png differ diff --git a/docs/assets/img/adapters/sample-apps/consul-imagehub-success.png b/docs/assets/img/adapters/sample-apps/consul-imagehub-success.png new file mode 100644 index 00000000000..2db92f99e5b Binary files /dev/null and b/docs/assets/img/adapters/sample-apps/consul-imagehub-success.png differ diff --git a/docs/assets/img/adapters/sample-apps/emojivoto.png b/docs/assets/img/adapters/sample-apps/emojivoto.png new file mode 100644 index 00000000000..5fafa268b24 Binary files /dev/null and b/docs/assets/img/adapters/sample-apps/emojivoto.png differ diff --git a/docs/assets/img/adapters/sample-apps/hipster-shop.png b/docs/assets/img/adapters/sample-apps/hipster-shop.png new file mode 100644 index 00000000000..8ca80c7ed16 Binary files /dev/null and b/docs/assets/img/adapters/sample-apps/hipster-shop.png differ diff --git a/docs/assets/img/adapters/sample-apps/httpbin.png b/docs/assets/img/adapters/sample-apps/httpbin.png new file mode 100644 index 00000000000..403d93a2bef Binary files /dev/null and b/docs/assets/img/adapters/sample-apps/httpbin.png differ diff --git a/docs/assets/img/adapters/sample-apps/imagehub-on-consul.png b/docs/assets/img/adapters/sample-apps/imagehub-on-consul.png new file mode 100644 index 00000000000..f2ece00bc50 Binary files /dev/null and b/docs/assets/img/adapters/sample-apps/imagehub-on-consul.png differ diff --git a/docs/assets/img/adapters/sample-apps/linkerd-books.png b/docs/assets/img/adapters/sample-apps/linkerd-books.png new file mode 100644 index 00000000000..7a94aa8511b Binary files /dev/null and b/docs/assets/img/adapters/sample-apps/linkerd-books.png differ diff --git a/docs/assets/img/architecture/B203EFA85E89491B.png b/docs/assets/img/architecture/B203EFA85E89491B.png new file mode 100644 index 00000000000..2a60f2942a7 Binary files /dev/null and b/docs/assets/img/architecture/B203EFA85E89491B.png differ diff --git a/docs/assets/img/architecture/Meshery-architecture-diagram.svg b/docs/assets/img/architecture/Meshery-architecture-diagram.svg deleted file mode 100644 index cf46febde13..00000000000 --- a/docs/assets/img/architecture/Meshery-architecture-diagram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/assets/img/architecture/Meshery-client-architecture.svg b/docs/assets/img/architecture/Meshery-client-architecture.svg index 781bc5b5f2e..beb48855f81 100644 --- a/docs/assets/img/architecture/Meshery-client-architecture.svg +++ b/docs/assets/img/architecture/Meshery-client-architecture.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/docs/assets/img/architecture/Meshery-provider-architecture.svg b/docs/assets/img/architecture/Meshery-provider-architecture.svg index 8fbe8f42cc6..cf5d32dc889 100644 --- a/docs/assets/img/architecture/Meshery-provider-architecture.svg +++ b/docs/assets/img/architecture/Meshery-provider-architecture.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/docs/assets/img/architecture/meshery-architecture.svg b/docs/assets/img/architecture/meshery-architecture.svg new file mode 100644 index 00000000000..6444aa7a796 --- /dev/null +++ b/docs/assets/img/architecture/meshery-architecture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/architecture/meshery-database.svg b/docs/assets/img/architecture/meshery-database.svg new file mode 100644 index 00000000000..d8cb05b7976 --- /dev/null +++ b/docs/assets/img/architecture/meshery-database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/architecture/meshery-operator-and-meshsync.svg b/docs/assets/img/architecture/meshery-operator-and-meshsync.svg new file mode 100644 index 00000000000..b38a353d078 --- /dev/null +++ b/docs/assets/img/architecture/meshery-operator-and-meshsync.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/architecture/meshery-settings-and-preferences.svg b/docs/assets/img/architecture/meshery-settings-and-preferences.svg new file mode 100644 index 00000000000..f36b759194e --- /dev/null +++ b/docs/assets/img/architecture/meshery-settings-and-preferences.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/architecture/meshery_extension_points.svg b/docs/assets/img/architecture/meshery_extension_points.svg new file mode 100644 index 00000000000..6860d3f29a9 --- /dev/null +++ b/docs/assets/img/architecture/meshery_extension_points.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/architecture/meshery_logical_object_model.svg b/docs/assets/img/architecture/meshery_logical_object_model.svg new file mode 100644 index 00000000000..6860d3f29a9 --- /dev/null +++ b/docs/assets/img/architecture/meshery_logical_object_model.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/architecture/upgrading-meshery.svg b/docs/assets/img/architecture/upgrading-meshery.svg new file mode 100644 index 00000000000..46be9a8f2b4 --- /dev/null +++ b/docs/assets/img/architecture/upgrading-meshery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/logo.png b/docs/assets/img/logo.png deleted file mode 100644 index f3a40fd21be..00000000000 Binary files a/docs/assets/img/logo.png and /dev/null differ diff --git a/docs/assets/img/meshery-server-page.png b/docs/assets/img/meshery-server-page.png new file mode 100644 index 00000000000..10aae87092c Binary files /dev/null and b/docs/assets/img/meshery-server-page.png differ diff --git a/docs/assets/img/meshery/meshery-logo-light-text.svg b/docs/assets/img/meshery/meshery-logo-light-text.svg new file mode 100644 index 00000000000..1e0e671b54d --- /dev/null +++ b/docs/assets/img/meshery/meshery-logo-light-text.svg @@ -0,0 +1 @@ +meshery-logo-light-text \ No newline at end of file diff --git a/docs/assets/img/performance-management/grafana-dashboard.png b/docs/assets/img/performance-management/grafana-dashboard.png new file mode 100644 index 00000000000..a57bd133816 Binary files /dev/null and b/docs/assets/img/performance-management/grafana-dashboard.png differ diff --git a/docs/assets/img/readme/Meshery-client-architecture.svg b/docs/assets/img/readme/Meshery-client-architecture.svg index 781bc5b5f2e..822d43c232a 100644 --- a/docs/assets/img/readme/Meshery-client-architecture.svg +++ b/docs/assets/img/readme/Meshery-client-architecture.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/docs/assets/img/readme/nginx.svg b/docs/assets/img/readme/nginx.svg new file mode 100644 index 00000000000..5f1c8791b73 --- /dev/null +++ b/docs/assets/img/readme/nginx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/readme/smp-dark-text.svg b/docs/assets/img/readme/smp-dark-text.svg new file mode 100644 index 00000000000..0dd4ccbe21f --- /dev/null +++ b/docs/assets/img/readme/smp-dark-text.svg @@ -0,0 +1 @@ +smp-dark-text \ No newline at end of file diff --git a/docs/assets/img/readme/traefik.svg b/docs/assets/img/readme/traefik.svg index a5764e2963f..68fca8952fe 100644 --- a/docs/assets/img/readme/traefik.svg +++ b/docs/assets/img/readme/traefik.svg @@ -1,28 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/assets/img/resources/book.jpeg b/docs/assets/img/resources/book.jpeg new file mode 100644 index 00000000000..fbbe467fc82 Binary files /dev/null and b/docs/assets/img/resources/book.jpeg differ diff --git a/docs/assets/img/resources/landscape.png b/docs/assets/img/resources/landscape.png new file mode 100644 index 00000000000..909e4052ee9 Binary files /dev/null and b/docs/assets/img/resources/landscape.png differ diff --git a/docs/assets/img/resources/settings.svg b/docs/assets/img/resources/settings.svg new file mode 100644 index 00000000000..832bb189bb3 --- /dev/null +++ b/docs/assets/img/resources/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/resources/workshops.svg b/docs/assets/img/resources/workshops.svg new file mode 100644 index 00000000000..54bda1e9708 --- /dev/null +++ b/docs/assets/img/resources/workshops.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/service-meshes/app-mesh.svg b/docs/assets/img/service-meshes/app-mesh.svg new file mode 100644 index 00000000000..9a560d7917e --- /dev/null +++ b/docs/assets/img/service-meshes/app-mesh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/service-meshes/aws-app-mesh.png b/docs/assets/img/service-meshes/aws-app-mesh.png deleted file mode 100644 index 4f8c214752a..00000000000 Binary files a/docs/assets/img/service-meshes/aws-app-mesh.png and /dev/null differ diff --git a/docs/assets/img/service-meshes/citrix.svg b/docs/assets/img/service-meshes/citrix.svg new file mode 100644 index 00000000000..2efea0a1b57 --- /dev/null +++ b/docs/assets/img/service-meshes/citrix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/service-meshes/cpx.png b/docs/assets/img/service-meshes/cpx.png deleted file mode 100644 index f460c6d16fe..00000000000 Binary files a/docs/assets/img/service-meshes/cpx.png and /dev/null differ diff --git a/docs/assets/img/service-meshes/istio.svg b/docs/assets/img/service-meshes/istio.svg index f428c041248..b55c19d96cc 100644 --- a/docs/assets/img/service-meshes/istio.svg +++ b/docs/assets/img/service-meshes/istio.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/docs/assets/img/service-meshes/kuma-white.svg b/docs/assets/img/service-meshes/kuma-white.svg new file mode 100644 index 00000000000..fef5ca87235 --- /dev/null +++ b/docs/assets/img/service-meshes/kuma-white.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/service-meshes/maesh.png b/docs/assets/img/service-meshes/maesh.png deleted file mode 100644 index 43e04fe5f10..00000000000 Binary files a/docs/assets/img/service-meshes/maesh.png and /dev/null differ diff --git a/docs/assets/img/service-meshes/nginx-sm.svg b/docs/assets/img/service-meshes/nginx-sm.svg new file mode 100644 index 00000000000..5f1c8791b73 --- /dev/null +++ b/docs/assets/img/service-meshes/nginx-sm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/img/service-meshes/nginx.svg b/docs/assets/img/service-meshes/nginx.svg new file mode 100644 index 00000000000..9ae67430b71 --- /dev/null +++ b/docs/assets/img/service-meshes/nginx.svg @@ -0,0 +1 @@ +NGINX Logo White Endorsement RGB \ No newline at end of file diff --git a/docs/assets/img/service-meshes/osm.svg b/docs/assets/img/service-meshes/osm.svg index 175548110b2..75e38ee12bb 100644 --- a/docs/assets/img/service-meshes/osm.svg +++ b/docs/assets/img/service-meshes/osm.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/docs/assets/img/service-meshes/tanzu.png b/docs/assets/img/service-meshes/tanzu.png deleted file mode 100644 index 8628aac7798..00000000000 Binary files a/docs/assets/img/service-meshes/tanzu.png and /dev/null differ diff --git a/docs/assets/img/service-meshes/tanzu.svg b/docs/assets/img/service-meshes/tanzu.svg new file mode 100644 index 00000000000..08f006b9128 --- /dev/null +++ b/docs/assets/img/service-meshes/tanzu.svg @@ -0,0 +1 @@ +Tanzu-Logomark \ No newline at end of file diff --git a/docs/assets/img/service-meshes/traefik-mesh.svg b/docs/assets/img/service-meshes/traefik-mesh.svg new file mode 100644 index 00000000000..8fb41549601 --- /dev/null +++ b/docs/assets/img/service-meshes/traefik-mesh.svg @@ -0,0 +1 @@ +traefik \ No newline at end of file diff --git a/docs/assets/img/service-meshes/traefik.svg b/docs/assets/img/service-meshes/traefik.svg deleted file mode 100644 index a5764e2963f..00000000000 --- a/docs/assets/img/service-meshes/traefik.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/js/jquery-3.3.1/jquery-3.3.1.min.js b/docs/assets/js/jquery-3.3.1/jquery-3.3.1.min.js new file mode 100644 index 00000000000..4d9b3a25875 --- /dev/null +++ b/docs/assets/js/jquery-3.3.1/jquery-3.3.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("