Skip to content

Add support to set client with cluster proxy #2066

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

sbahar619
Copy link
Contributor

@sbahar619 sbahar619 commented Aug 22, 2024

Short description:

Add support to set client with cluster proxy

More details:
What this PR does / why we need it:
Which issue(s) this PR fixes:

https://issues.redhat.com/browse/CNV-46351

Special notes for reviewer:
Bug:

Summary by CodeRabbit

  • New Features

    • Enhanced Kubernetes client configuration to support proxy settings, improving flexibility for users connecting through proxies.
  • Bug Fixes

    • Ensured proper logging of proxy settings for better transparency and troubleshooting.

@redhat-qe-bot
Copy link
Contributor

Report bugs in Issues

The following are automatically added:

  • Add reviewers from OWNER file (in the root of the repository) under reviewers section.
  • Set PR size label.
  • New issue is created for the PR. (Closed when PR is merged/closed)
  • Run pre-commit if .pre-commit-config.yaml exists in the repo.

Available user actions:

  • To mark PR as WIP comment /wip to the PR, To remove it from the PR comment /wip cancel to the PR.
  • To block merging of PR comment /hold, To un-block merging of PR comment /hold cancel.
  • To mark PR as verified comment /verified to the PR, to un-verify comment /verified cancel to the PR.
    verified label removed on each new commit push.
  • To cherry pick a merged PR comment /cherry-pick <target branch to cherry-pick to> in the PR.
    • Multiple target branches can be cherry-picked, separated by spaces. (/cherry-pick branch1 branch2)
    • Cherry-pick will be started when PR is merged
  • To build and push container image command /build-and-push-container in the PR (tag will be the PR number).
    • You can add extra args to the Podman build command
      • Example: /build-and-push-container --build-arg OPENSHIFT_PYTHON_WRAPPER_COMMIT=<commit_hash>
  • To add a label by comment use /<label name>, to remove, use /<label name> cancel
  • To assign reviewers based on OWNERS file use /assign-reviewers
  • To check if PR can be merged use /check-can-merge
Supported /retest check runs
  • /retest tox: Retest tox
  • /retest python-module-install: Retest python-module-install
Supported labels
  • hold
  • verified
  • wip
  • lgtm

Copy link

coderabbitai bot commented Aug 22, 2024

Walkthrough

The update modifies the get_client function to support the configuration of the Kubernetes client with proxy settings using the HTTPS_PROXY or HTTP_PROXY environment variables. The function logs the proxy being used and adjusts the client instantiation accordingly. If no proxy is set, it defaults to the previous client creation logic. Additionally, the function signature has been updated to include a client_configuration parameter for enhanced flexibility.

Changes

Files Change Summary
ocp_resources/resource.py Enhanced get_client function to handle proxy configuration using environment variables, logging the proxy in use. Function signature updated to include a client_configuration parameter, while existing logic for non-proxy scenarios remains unchanged.

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai anywhere in the PR title to generate the title automatically.
  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@sbahar619
Copy link
Contributor Author

/verified

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 8e66461 and 2750cc9.

Files selected for processing (1)
  • ocp_resources/resource.py (2 hunks)
Additional comments not posted (1)
ocp_resources/resource.py (1)

115-127: Verify proxy configuration logic.

The logic for configuring the client with a proxy is well-implemented. Ensure that the proxy settings are correctly applied and that any potential proxy-related issues are handled appropriately.

Run the following script to verify the proxy configuration logic:

Verification successful

Proxy Configuration Logic Verified

The proxy configuration logic in the get_client function is correctly implemented. The code sets the proxy in the client configuration and uses it to create the API client, ensuring proper handling of proxy settings.

  • Location: ocp_resources/resource.py
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the proxy configuration logic is correctly applied.

# Test: Search for the proxy configuration logic. Expect: Proper handling of proxy settings.
rg --type python -A 5 $'client_configuration.proxy = proxy'

Length of output: 91


Script:

#!/bin/bash
# Description: Verify that the proxy configuration logic is correctly applied.

# Test: Search for the proxy configuration logic. Expect: Proper handling of proxy settings.
rg --type py -A 5 $'client_configuration.proxy = proxy'

Length of output: 517

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 2750cc9 and 0276f56.

Files selected for processing (1)
  • ocp_resources/resource.py (2 hunks)
Files skipped from review as they are similar to previous changes (1)
  • ocp_resources/resource.py

@sbahar619
Copy link
Contributor Author

/verified

@sbahar619
Copy link
Contributor Author

/verified

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 6d6ea0e and 500ee4f.

Files selected for processing (1)
  • ocp_resources/resource.py (4 hunks)
Files skipped from review as they are similar to previous changes (1)
  • ocp_resources/resource.py

# kubernetes.config.kube_config.load_kube_config sets KUBE_CONFIG_DEFAULT_LOCATION during module import.
# If `KUBECONFIG` environment variable is set via code, the `KUBE_CONFIG_DEFAULT_LOCATION` will be None since
# is populated during import which comes before setting the variable in code.
config_file = config_file or os.environ.get("KUBECONFIG", "~/.kube/config")
client_configuration = client_configuration or client.Configuration()
proxy = os.environ.get("HTTPS_PROXY") or os.environ.get("HTTP_PROXY")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

User will give as configured client_configuration and we just use it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will make the implementation very complicated on the caller side if we omit this important option.
Please consider keeping the proxy to be set additionally as environment variable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can add logic to override the proxy part if it's already being configured in the client_configuration regardless of being set by environment variable.

@myakove
Copy link
Collaborator

myakove commented Sep 11, 2024

@sbahar619 this can be closed right? if so please close the PR

@sbahar619
Copy link
Contributor Author

@sbahar619 this can be closed right? if so please close the PR

Right now yes, but we need to solve this issue, I will write a solution proposal to decide on the agreed solution.

@sbahar619 sbahar619 closed this Sep 15, 2024
@myakove
Copy link
Collaborator

myakove commented Sep 15, 2024

@sbahar619 this can be closed right? if so please close the PR

Right now yes, but we need to solve this issue, I will write a solution proposal to decide on the agreed solution.

@sbahar619 Which issue are you trying to solve?

@sbahar619
Copy link
Contributor Author

@sbahar619 this can be closed right? if so please close the PR

Right now yes, but we need to solve this issue, I will write a solution proposal to decide on the agreed solution.

@sbahar619 Which issue are you trying to solve?

To configure the client to use proxy, currently to implement it in cnv-tests will be complicated so before I will start working on it, I will create a document about the possible implementation solutions and after agreement I will start.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants