diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b4ea015e..b4ce106c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -10,6 +10,7 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior, such as: + 1. Try adding upstream through the client 2. Returns a panic 3. Here is the stacktrace @@ -18,9 +19,10 @@ Steps to reproduce the behavior, such as: A clear and concise description of what you expected to happen. **Your environment** -* Version of nginx-plus-go-client -* Version of NGINX Plus -* Version of the OS + +- Version of nginx-plus-go-client +- Version of NGINX Plus +- Version of the OS **Additional context** Add any other context about the problem here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d69900c7..b9c0f981 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,10 @@ ### Proposed changes -Describe the use case and detail of the change. If this PR addresses an issue on GitHub, make sure to include a link to that issue here in this description (not in the title of the PR). + +Describe the use case and detail of the change. If this PR addresses an issue on GitHub, make sure to include a link to +that issue here in this description (not in the title of the PR). ### Checklist + Before creating a PR, run through this checklist and mark each as complete. - [ ] I have read the [CONTRIBUTING](https://github.com/nginxinc/nginx-plus-go-client/blob/main/CONTRIBUTING.md) doc diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml new file mode 100644 index 00000000..19326096 --- /dev/null +++ b/.markdownlint-cli2.yaml @@ -0,0 +1,18 @@ +# Rule configuration. +# For rule descriptions and how to fix: https://github.com/DavidAnson/markdownlint/tree/main#rules--aliases +config: + ul-style: + style: dash + no-duplicate-heading: + siblings_only: true + line-length: + line_length: 120 + code_blocks: false + tables: false + +# Define glob expressions to ignore +ignores: + - ".github/" + +# Fix any fixable errors +fix: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..9c7b97df --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,47 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + args: [--allow-multiple-documents] + - id: check-added-large-files + - id: check-merge-conflict + - id: check-shebang-scripts-are-executable + - id: check-case-conflict + - id: check-vcs-permalinks + - id: mixed-line-ending + args: [--fix=lf] + - id: no-commit-to-branch + - id: fix-byte-order-marker + +- repo: local + hooks: + - id: golang-diff + name: create-go-diff + entry: bash -c 'git diff -p origin/main > /tmp/diff.patch' + language: system + types: [go] + pass_filenames: false + +- repo: https://github.com/golangci/golangci-lint + rev: v1.53.3 + hooks: + - id: golangci-lint + args: [--new-from-patch=/tmp/diff.patch] + +- repo: https://github.com/gitleaks/gitleaks + rev: v8.17.0 + hooks: + - id: gitleaks + +- repo: https://github.com/DavidAnson/markdownlint-cli2 + rev: v0.8.1 + hooks: + - id: markdownlint-cli2 + +ci: + skip: [golang-diff, golangci-lint] diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f359b9f..9166ec01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +# Changelog + ## 0.10.0 (Jul 19, 2022) An automatically generated list of changes can be found on GitHub at: [0.10.0 Release](https://github.com/nginxinc/nginx-plus-go-client/releases/tag/v0.10.0) @@ -11,65 +13,102 @@ An automatically generated list of changes can be found on GitHub at: [0.9.0 Rel An automatically generated list of changes can be found on GitHub at: [0.8.0 Release](https://github.com/nginxinc/nginx-plus-go-client/releases/tag/v0.8.0) ## 0.7.0 (Jul 10, 2020) + FEATURES: -* [38](https://github.com/nginxinc/nginx-plus-go-client/pull/38): *Support for /slabs API endpoint*. The client now supports retrieving shared memory zone usage info. -* [41](https://github.com/nginxinc/nginx-plus-go-client/pull/41): *Support for /processes API endpoint*. The client now supports retrieving processes info. + +- [38](https://github.com/nginxinc/nginx-plus-go-client/pull/38): *Support for /slabs API endpoint*. The client now + supports retrieving shared memory zone usage info. +- [41](https://github.com/nginxinc/nginx-plus-go-client/pull/41): *Support for /processes API endpoint*. The client now + supports retrieving processes info. CHANGES: -* The version of NGINX Plus for e2e testing was changed to R22. -* The version of Go was changed to 1.14 + +- The version of NGINX Plus for e2e testing was changed to R22. +- The version of Go was changed to 1.14 ## 0.6.0 (Nov 8, 2019) + FEATURES: -* [34](https://github.com/nginxinc/nginx-plus-go-client/pull/34): *Support for updating upstream servers parameters*. The client now supports updating upstream parameters of servers that already exist in NGINX Plus. + +- [34](https://github.com/nginxinc/nginx-plus-go-client/pull/34): *Support for updating upstream servers parameters*. + The client now supports updating upstream parameters of servers that already exist in NGINX Plus. CHANGES: -* Public methods `UpdateHTTPServers` and `UpdateStreamServers` now return a third slice that includes the updated servers -- i.e. the servers that were already present in NGINX Plus but were updated with different parameters. -* Client will assume port `80` in addresses of updated servers of `UpdateHTTPServers` and `UpdateStreamServers` if port is not explicitly set. -* The version of Go was changed to 1.13 + +- Public methods `UpdateHTTPServers` and `UpdateStreamServers` now return a third slice that includes the updated + servers -- i.e. the servers that were already present in NGINX Plus but were updated with different parameters. +- Client will assume port `80` in addresses of updated servers of `UpdateHTTPServers` and `UpdateStreamServers` if port + is not explicitly set. +- The version of Go was changed to 1.13 ## 0.5.0 (Sep 25, 2019) + FEATURES: -* [30](https://github.com/nginxinc/nginx-plus-go-client/pull/30): *Support additional upstream server parameters*. -The client now supports configuring `route`, `backup`, `down`, `drain`, `weight` and `service` parameters for http upstreams and `backup`, `down`, `weight` and `service` parameters for stream upstreams. -* [31](https://github.com/nginxinc/nginx-plus-go-client/pull/31): *Support location zones and resolver metrics*. -BUGFIXES: -* [29](https://github.com/nginxinc/nginx-plus-go-client/pull/29): *Fix max_fails parameter in upstream servers*. Previously, if the MaxFails field was not explicitly set, the client would incorrectly configure an upstream with the value `0` instead of the correct value `1`. +- [30](https://github.com/nginxinc/nginx-plus-go-client/pull/30): *Support additional upstream server parameters*. The +client now supports configuring `route`, `backup`, `down`, `drain`, `weight` and `service` parameters for http +upstreams and `backup`, `down`, `weight` and `service` parameters for stream upstreams. +- [31](https://github.com/nginxinc/nginx-plus-go-client/pull/31): *Support location zones and resolver metrics*. + +FIXES: + +- [29](https://github.com/nginxinc/nginx-plus-go-client/pull/29): *Fix max_fails parameter in upstream servers*. + Previously, if the MaxFails field was not explicitly set, the client would incorrectly configure an upstream with the + value `0` instead of the correct value `1`. CHANGES: -* The version of NGINX Plus for e2e testing was changed to R19. -* The version of the API was changed to 5. + +- The version of NGINX Plus for e2e testing was changed to R19. +- The version of the API was changed to 5. ## 0.4.0 (July 17, 2019) + FEATURES: -* [24](https://github.com/nginxinc/nginx-plus-go-client/pull/24): *Support `MaxConns` in upstream servers*. -BUGFIXES: -* [25](https://github.com/nginxinc/nginx-plus-go-client/pull/25): *Fix session metrics for stream server zones*. Session metrics with a status of `4xx` or `5xx` are now correctly reported. Previously they were always reported as `0`. +- [24](https://github.com/nginxinc/nginx-plus-go-client/pull/24): *Support `MaxConns` in upstream servers*. + +FIXES: + +- [25](https://github.com/nginxinc/nginx-plus-go-client/pull/25): *Fix session metrics for stream server zones*. Session + metrics with a status of `4xx` or `5xx` are now correctly reported. Previously they were always reported as `0`. ## 0.3.1 (June 10, 2019) + CHANGES: -* [22](https://github.com/nginxinc/nginx-plus-go-client/pull/22): *Change in stream zone sync metrics*. `StreamZoneSync` field of the `Stats` type is now a pointer. It will be nil if NGINX Plus doesn't report any zone sync stats. + +- [22](https://github.com/nginxinc/nginx-plus-go-client/pull/22): *Change in stream zone sync metrics*. `StreamZoneSync` + field of the `Stats` type is now a pointer. It will be nil if NGINX Plus doesn't report any zone sync stats. ## 0.3 (May 29, 2019) + FEATURES: -* [20](https://github.com/nginxinc/nginx-plus-go-client/pull/20): *Support for stream zone sync metrics*. The client `GetStats` method now additionally returns stream zone sync metrics. -* [13](https://github.com/nginxinc/nginx-plus-go-client/pull/13): *Support for key-value endpoints*. The client implements a set of methods to create/modify/delete key-val pairs for both http and stream contexts. -* [12](https://github.com/nginxinc/nginx-plus-go-client/pull/12) *Support for NGINX status info*. The client `GetStats` method now additionally returns NGINX status metrics. Thanks to [jthurman42](https://github.com/jthurman42). + +- [20](https://github.com/nginxinc/nginx-plus-go-client/pull/20): *Support for stream zone sync metrics*. The client + `GetStats` method now additionally returns stream zone sync metrics. +- [13](https://github.com/nginxinc/nginx-plus-go-client/pull/13): *Support for key-value endpoints*. The client + implements a set of methods to create/modify/delete key-val pairs for both http and stream contexts. +- [12](https://github.com/nginxinc/nginx-plus-go-client/pull/12) *Support for NGINX status info*. The client `GetStats` + method now additionally returns NGINX status metrics. Thanks to [jthurman42](https://github.com/jthurman42). CHANGES: -* The repository was renamed to `nginx-plus-go-client` instead of `nginx-plus-go-sdk`. If the client is used as a dependency, this name needs to be changed in the import section (`import "github.com/nginxinc/nginx-plus-go-client/client"`). -* The version of the API was changed to 4. -* The version of NGINX Plus for e2e testing was changed to R18. + +- The repository was renamed to `nginx-plus-go-client` instead of `nginx-plus-go-sdk`. If the client is used as a + dependency, this name needs to be changed in the import section (`import + "github.com/nginxinc/nginx-plus-go-client/client"`). +- The version of the API was changed to 4. +- The version of NGINX Plus for e2e testing was changed to R18. ## 0.2 (Sep 7, 2018) FEATURES: -* [7](https://github.com/nginxinc/nginx-plus-go-sdk/pull/7): *Support for stream server zone and stream upstream metrics*. The client `GetStats` method now additionally returns stream server zone and stream upstream metrics. + +- [7](https://github.com/nginxinc/nginx-plus-go-sdk/pull/7): *Support for stream server zone and stream upstream + metrics*. The client `GetStats` method now additionally returns stream server zone and stream upstream metrics. CHANGES: -* The version of NGINX Plus for e2e testing was changed to R16. + +- The version of NGINX Plus for e2e testing was changed to R16. ## 0.1 (July 30, 2018) + Initial release diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2e320d0f..253285bc 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -16,21 +16,21 @@ appearance, race, religion, or sexual identity and orientation. Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or +- The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities @@ -57,7 +57,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at integrations@nginx.com. All +reported by contacting the project team at . All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. @@ -70,6 +70,6 @@ members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html +available at [homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 86e06e87..7d21b1b5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,9 @@ # Contributing Guidelines -The following is a set of guidelines for contributing to the NGINX Plus Go Client. We really appreciate that you are considering contributing! +The following is a set of guidelines for contributing to the NGINX Plus Go Client. We really appreciate that you are +considering contributing! -#### Table Of Contents +## Table Of Contents [Ask a Question](#ask-a-question) @@ -11,8 +12,9 @@ The following is a set of guidelines for contributing to the NGINX Plus Go Clien [Contributing](#contributing) [Style Guides](#style-guides) - * [Git Style Guide](#git-style-guide) - * [Go Style Guide](#go-style-guide) + +- [Git Style Guide](#git-style-guide) +- [Go Style Guide](#go-style-guide) [Code of Conduct](CODE_OF_CONDUCT.md) @@ -28,45 +30,54 @@ Please reserve GitHub issues for feature requests and bugs rather than general q Read the usage and testing steps in the [README](README.md). - ## Contributing ### Report a Bug -To report a bug, open an issue on GitHub with the label `bug` using the available bug report issue template. Please ensure the issue has not already been reported. +To report a bug, open an issue on GitHub with the label `bug` using the available bug report issue template. Please +ensure the issue has not already been reported. ### Suggest an Enhancement -To suggest an enhancement, please create an issue on GitHub with the label `enhancement` using the available feature issue template. +To suggest an enhancement, please create an issue on GitHub with the label `enhancement` using the available feature +issue template. ### Open a Pull Request -* Fork the repo, create a branch, submit a PR when your changes are tested and ready for review -* Fill in [our pull request template](.github/PULL_REQUEST_TEMPLATE.md) +- Fork the repo, create a branch, submit a PR when your changes are tested and ready for review +- Fill in [our pull request template](.github/PULL_REQUEST_TEMPLATE.md) > **Note** > -> If you’d like to implement a new feature, please consider creating a feature request issue first to start a discussion about the feature. +> If you’d like to implement a new feature, please consider creating a feature request issue first to start a discussion +> about the feature. ### Issue lifecycle -* When an issue or PR is created, it will be triaged by the core development team and assigned a label to indicate the type of issue it is (bug, feature request, etc) and to determine the milestone. Please see the [Issue Lifecycle](ISSUE_LIFECYCLE.md) document for more information. +- When an issue or PR is created, it will be triaged by the core development team and assigned a label to indicate the + type of issue it is (bug, feature request, etc) and to determine the milestone. Please see the [Issue + Lifecycle](ISSUE_LIFECYCLE.md) document for more information. ## Style Guides ### Git Style Guide -* Keep a clean, concise and meaningful git commit history on your branch, rebasing locally and squashing before submitting a PR -* Follow the guidelines of writing a good commit message as described here https://chris.beams.io/posts/git-commit/ and summarized in the next few points - * In the subject line, use the present tense ("Add feature" not "Added feature") - * In the subject line, use the imperative mood ("Move cursor to..." not "Moves cursor to...") - * Limit the subject line to 72 characters or less - * Reference issues and pull requests liberally after the subject line - * Add more detailed description in the body of the git message (`git commit -a` to give you more space and time in your text editor to write a good message instead of `git commit -am`) +- Keep a clean, concise and meaningful git commit history on your branch, rebasing locally and squashing before + submitting a PR +- Follow the guidelines of writing a good commit message as described here + and summarized in the next few points + - In the subject line, use the present tense ("Add feature" not "Added feature") + - In the subject line, use the imperative mood ("Move cursor to..." not "Moves cursor to...") + - Limit the subject line to 72 characters or less + - Reference issues and pull requests liberally after the subject line + - Add more detailed description in the body of the git message (`git commit -a` to give you more space and time in + your text editor to write a good message instead of `git commit -am`) ### Go Style Guide -* Run `gofmt` over your code to automatically resolve a lot of style issues. Most editors support this running automatically when saving a code file. -* Run `go lint` and `go vet` on your code too to catch any other issues. -* Follow this guide on some good practice and idioms for Go - https://github.com/golang/go/wiki/CodeReviewComments -* To check for extra issues, install [golangci-lint](https://github.com/golangci/golangci-lint) and run `make lint` or `golangci-lint run` +- Run `gofmt` over your code to automatically resolve a lot of style issues. Most editors support this running + automatically when saving a code file. +- Run `go lint` and `go vet` on your code too to catch any other issues. +- Follow this guide on some good practice and idioms for Go - +- To check for extra issues, install [golangci-lint](https://github.com/golangci/golangci-lint) and run `make lint` or + `golangci-lint run` diff --git a/ISSUE_LIFECYCLE.md b/ISSUE_LIFECYCLE.md index c57bc037..545af55f 100644 --- a/ISSUE_LIFECYCLE.md +++ b/ISSUE_LIFECYCLE.md @@ -1,36 +1,52 @@ # Issue Lifecycle -To ensure a balance between work carried out by the NGINX engineering team while encouraging community involvement on this project, we use the following issue lifecycle. (Note: The issue *creator* refers to the community member that created the issue. The issue *owner* refers to the NGINX team member that is responsible for managing the issue lifecycle.) +To ensure a balance between work carried out by the NGINX engineering team while encouraging community involvement on +this project, we use the following issue lifecycle. (Note: The issue *creator* refers to the community member that +created the issue. The issue *owner* refers to the NGINX team member that is responsible for managing the issue +lifecycle.) 1. New issue created by community member. +2. Assign issue owner: All new issues are assigned an owner on the NGINX engineering team. This owner shepherds the + issue through the subsequent stages in the issue lifecycle. -2. Assign issue owner: All new issues are assigned an owner on the NGINX engineering team. This owner shepherds the issue through the subsequent stages in the issue lifecycle. +3. Determine issue type: This is done with automation where possible, and manually by the owner where necessary. The + associated label is applied to the issue. + Possible Issue Types: -3. Determine issue type: This is done with automation where possible, and manually by the owner where necessary. The associated label is applied to the issue. - #### Possible Issue Types - `needs more info`: The owner should use the issue to request information from the creator. If we don't receive the needed information within 7 days, automation closes the issue. + - `needs more info`: The owner should use the issue to request information from the creator. If we don't receive the + needed information within 7 days, automation closes the issue. - `bug`: The implementation of a feature is not correct. + - `bug`: The implementation of a feature is not correct. - `proposal`: Request for a change. This can be a new feature, tackling technical debt, documentation changes, or improving existing features. + - `proposal`: Request for a change. This can be a new feature, tackling technical debt, documentation changes, or + improving existing features. - `question`: The owner converts the issue to a github discussion and engages the creator. + - `question`: The owner converts the issue to a github discussion and engages the creator. +4. Determine milestone: The owner, in collaboration with the wider team (PM & engineering), determines what milestone to + attach to an issue. Generally, milestones correspond to product releases - however there are two 'magic' milestones + with special meanings (not tied to a specific release): -4. Determine milestone: The owner, in collaboration with the wider team (PM & engineering), determines what milestone to attach to an issue. Generally, milestones correspond to product releases - however there are two 'magic' milestones with special meanings (not tied to a specific release): + - Issues assigned to backlog: Our team is in favour of implementing the feature request/fixing the issue, however the + implementation is not yet assigned to a concrete release. If and when a `backlog` issue aligns well with our + roadmap, it will be scheduled for a concrete iteration. We review and update our roadmap at least once every + quarter. The `backlog` list helps us shape our roadmap, but it is not the only source of input. Therefore, some + `backlog` items may eventually be closed as `out of scope`, or relabelled as `backlog candidate` once it becomes + clear that they do not align with our evolving roadmap. - - Issues assigned to backlog: Our team is in favour of implementing the feature request/fixing the issue, however the implementation is not yet assigned to a concrete release. If and when a `backlog` issue aligns well with our roadmap, it will be scheduled for a concrete iteration. We review and update our roadmap at least once every quarter. The `backlog` list helps us shape our roadmap, but it is not the only source of input. Therefore, some `backlog` items may eventually be closed as `out of scope`, or relabelled as `backlog candidate` once it becomes clear that they do not align with our evolving roadmap. - - - Issues assigned to `backlog candidate`: Our team does not intend to implement the feature/fix request described in the issue and wants the community to weigh in before we make our final decision. + - Issues assigned to `backlog candidate`: Our team does not intend to implement the feature/fix request described in + the issue and wants the community to weigh in before we make our final decision. `backlog` issues can be labeled by the owner as `help wanted` and/or `good first issue` as appropriate. +5. Promotion of `backlog candidate` issue to `backlog` issue: If an issue labelled `backlog candidate` receives more + than 30 upvotes within 60 days, we promote the issue by applying the `backlog` label. While issues promoted in this + manner have not been committed to a particular release, we welcome PRs from the community on them. -5. Promotion of `backlog candidate` issue to `backlog` issue: If an issue labelled `backlog candidate` receives more than 30 upvotes within 60 days, we promote the issue by applying the `backlog` label. While issues promoted in this manner have not been committed to a particular release, we welcome PRs from the community on them. - - If an issue does not make our roadmap and has not been moved to a discussion, it is closed with the label `out of scope`. The goal is to get every issue in the issues list to one of the following end states: + If an issue does not make our roadmap and has not been moved to a discussion, it is closed with the label `out of + scope`. The goal is to get every issue in the issues list to one of the following end states: - An assigned release. - The `backlog` label. diff --git a/README.md b/README.md index 884342a7..3d4b04da 100644 --- a/README.md +++ b/README.md @@ -49,10 +49,10 @@ go test Prerequisites: -* Docker -* golang -* Make -* NGINX Plus license - put `nginx-repo.crt` and `nginx-repo.key` into the `docker` folder. +- Docker +- golang +- Make +- NGINX Plus license - put `nginx-repo.crt` and `nginx-repo.key` into the `docker` folder. Run Tests: diff --git a/SECURITY.md b/SECURITY.md index d8b8e373..d2d463d7 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,13 +2,17 @@ ## Supported Versions -We advise users to use the most recent release of NGINX Plus Go Client library. This project is not covered by the NGINX Plus support contract. +We advise users to use the most recent release of NGINX Plus Go Client library. This project is not covered by the NGINX +Plus support contract. ## Reporting a Vulnerability -The F5 Security Incident Response Team (F5 SIRT) has an email alias that makes it easy to report potential security vulnerabilities. +The F5 Security Incident Response Team (F5 SIRT) has an email alias that makes it easy to report potential security +vulnerabilities. -- If you’re an F5 customer with an active support contract, please contact [F5 Technical Support](https://www.f5.com/services/support). -- If you aren’t an F5 customer, please report any potential or current instances of security vulnerabilities with any F5 product to the F5 Security Incident Response Team at F5SIRT@f5.com +- If you’re an F5 customer with an active support contract, please contact [F5 Technical + Support](https://www.f5.com/services/support). +- If you aren’t an F5 customer, please report any potential or current instances of security vulnerabilities with any F5 + product to the F5 Security Incident Response Team at -For more information visit https://www.f5.com/services/support/report-a-vulnerability +For more information visit