-
Notifications
You must be signed in to change notification settings - Fork 170
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* add get_virtctl_tool function - separate getting asset from github to separated function - get virtctl from CNV from the cluster - as a fallback download it from github - add fixture fixes: #10366 Signed-off-by: Daniel Horak <[email protected]>
- Loading branch information
Showing
5 changed files
with
128 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
import json | ||
import logging | ||
import os | ||
import platform | ||
|
||
from ocs_ci.framework import config | ||
|
||
from ocs_ci.ocs.exceptions import ( | ||
NotFoundError, | ||
UnsupportedOSType, | ||
) | ||
from ocs_ci.utility.utils import ( | ||
download_file, | ||
exec_cmd, | ||
get_url_content, | ||
prepare_bin_dir, | ||
) | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
def get_asset_from_github(name, owner_repo, release_tag="latest"): | ||
""" | ||
Download and install asset from github. | ||
Args: | ||
name (str): name of the tool which should be downloaded | ||
owner_repo (str): github repository with the tool in form owner/repo | ||
release_tag (str): release tag to download (default: latest) | ||
""" | ||
if release_tag != "latest": | ||
release_tag = f"tags/{release_tag}" | ||
releases_api_url = ( | ||
f"https://api.github.com/repos/{owner_repo}/releases/{release_tag}" | ||
) | ||
if config.AUTH.get("github"): | ||
github_auth = ( | ||
config.AUTH["github"].get("username"), | ||
config.AUTH["github"].get("token"), | ||
) | ||
logger.debug(f"Using github authentication (user: {github_auth[0]})") | ||
else: | ||
github_auth = None | ||
logger.warning( | ||
"Github credentials are not provided in data/auth.yaml file. " | ||
"You might encounter issues with accessing github api as it " | ||
"have very strict rate limit for unauthenticated requests " | ||
"(60 requests per hour). Please check docs/getting_started.md " | ||
"file to find how to configure github authentication." | ||
) | ||
release_data = json.loads(get_url_content(releases_api_url, auth=github_auth)) | ||
|
||
if platform.system() == "Darwin" and platform.machine() == "x86_64": | ||
asset_name = "darwin-amd64" | ||
elif platform.system() == "Darwin" and platform.machine() == "arm64": | ||
asset_name = "darwin-arm64" | ||
elif platform.system() == "Linux" and platform.machine() == "x86_64": | ||
asset_name = "linux-amd64" | ||
else: | ||
raise UnsupportedOSType | ||
|
||
for asset in release_data["assets"]: | ||
if asset_name in asset["name"]: | ||
download_url = asset["browser_download_url"] | ||
break | ||
else: | ||
raise NotFoundError( | ||
f"{name} binary for selected type {asset_name} was not found" | ||
) | ||
prepare_bin_dir() | ||
bin_dir = os.path.expanduser(config.RUN["bin_dir"]) | ||
logger.info(f"Downloading tool from '{download_url}' to '{bin_dir}'") | ||
download_file(download_url, os.path.join(bin_dir, name)) | ||
cmd = f"chmod +x {os.path.join(bin_dir, name)}" | ||
exec_cmd(cmd) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
import logging | ||
|
||
from ocs_ci.framework import config | ||
|
||
# from ocs_ci.ocs import constants | ||
from ocs_ci.deployment.cnv import CNVInstaller | ||
from ocs_ci.helpers.github import get_asset_from_github | ||
from ocs_ci.ocs.exceptions import CommandFailed | ||
from ocs_ci.utility.utils import exec_cmd | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
def get_virtctl_tool(): | ||
""" | ||
Download and install virtctl tool. | ||
""" | ||
try: | ||
virtctl_version = exec_cmd("virtctl version -c", silent=True) | ||
except (CommandFailed, FileNotFoundError): | ||
logger.info("virtctl tool is not available, installing it") | ||
try: | ||
cnv_obj = CNVInstaller() | ||
cnv_obj.download_and_extract_virtctl_binary() | ||
virtctl_version = exec_cmd("virtctl version -c", silent=True) | ||
except Exception as err: | ||
logger.info( | ||
f"Downloading or extracting virtctl binary from OCP Cluster failed: {err}. " | ||
"Falling back to download it from upstream github repo." | ||
) | ||
virtctl_release_tag = config.ENV_DATA.get("virtctl_release_tag", "latest") | ||
get_asset_from_github( | ||
name="virtctl", | ||
owner_repo=config.ENV_DATA.get("virtctl_owner_repo"), | ||
release_tag=virtctl_release_tag, | ||
) | ||
virtctl_version = exec_cmd("virtctl version -c", silent=True) | ||
logger.info(f"virtctl tool is available: {virtctl_version.stdout.decode('utf-8')}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters