Initial commit
This commit is contained in:
commit
90e718edb9
4 changed files with 180 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
.idea/*
|
||||
token
|
||||
20
README.md
Normal file
20
README.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# List RHEL Images
|
||||
|
||||
This is a script to list available RHEL images for download.
|
||||
|
||||
Requires an offline token (see https://access.redhat.com/management/api) to generate one.
|
||||
|
||||
./list-rhel-images.py --help
|
||||
usage: list-rhel-images.py [-h] [-t TOKEN] [--token-file TOKEN_FILE] [-a ARCHITECTURE] [-v VERSION] [-f {json,table}]
|
||||
|
||||
options:
|
||||
-h, --help show this help message and exit
|
||||
-t TOKEN, --token TOKEN
|
||||
The offline token used to generate the bearer token
|
||||
--token-file TOKEN_FILE
|
||||
-a ARCHITECTURE, --architecture ARCHITECTURE
|
||||
Architecture
|
||||
-v VERSION, --version VERSION
|
||||
Version
|
||||
-f {json,table}, --format {json,table}
|
||||
Output format, one of json or table
|
||||
156
list-rhel-images.py
Executable file
156
list-rhel-images.py
Executable file
|
|
@ -0,0 +1,156 @@
|
|||
#!/bin/env python3
|
||||
"""
|
||||
A script to list the available RHEL images available to download.
|
||||
|
||||
Requires a token (see https://access.redhat.com/management/api to generate a token)
|
||||
|
||||
By default, this will list all the available images for RHEL 8.4 on the x86_64 architecture in json format.
|
||||
|
||||
|
||||
|
||||
"""
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
|
||||
from tabulate import tabulate
|
||||
import requests
|
||||
|
||||
|
||||
def parse_arguments():
|
||||
"""Parse the command line arguments."""
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument(
|
||||
"-a",
|
||||
"--architecture",
|
||||
type=str,
|
||||
default="x86_64",
|
||||
help="Architecture. Default is x86_64",
|
||||
)
|
||||
|
||||
# noinspection PyTypeChecker
|
||||
parser.add_argument(
|
||||
"-t",
|
||||
"--token",
|
||||
type=str,
|
||||
help="".join(
|
||||
[
|
||||
"The offline token used to generate the bearer token. "
|
||||
"Either this or --token-file must be specified.",
|
||||
]
|
||||
),
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--token-file",
|
||||
type=open,
|
||||
help="The file to read the token from. Either this or --token must be specified.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-v",
|
||||
"--version",
|
||||
type=str,
|
||||
default="8.4",
|
||||
help="Version. Default is 8.4",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-f",
|
||||
"--format",
|
||||
choices=["json", "table"],
|
||||
type=str,
|
||||
default="json",
|
||||
help="Output format, one of json or table. Default is json",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if not (args.token or args.token_file):
|
||||
sys.stderr.write(
|
||||
"Either --token-file or --token/-t must be supplied"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
if args.token_file:
|
||||
args.token = args.token_file.read()
|
||||
|
||||
return args
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function."""
|
||||
args = parse_arguments()
|
||||
req = requests.post(
|
||||
"https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token",
|
||||
data={
|
||||
"grant_type": "refresh_token",
|
||||
"client_id": "rhsm-api",
|
||||
"refresh_token": args.token,
|
||||
},
|
||||
timeout=120,
|
||||
)
|
||||
token = req.json()["access_token"]
|
||||
|
||||
req = requests.get(
|
||||
"https://api.access.redhat.com/management/v1/images/rhel/8.4/x86_64",
|
||||
headers={"Authorization": "Bearer " + token},
|
||||
timeout=120,
|
||||
)
|
||||
|
||||
images = req.json()["body"]
|
||||
|
||||
if args.format == "table":
|
||||
table = [
|
||||
[
|
||||
"Name",
|
||||
"Architecture",
|
||||
"Checksum",
|
||||
"URI",
|
||||
"Filename",
|
||||
"Date",
|
||||
]
|
||||
]
|
||||
for i in images:
|
||||
table.append(
|
||||
[
|
||||
i["imageName"],
|
||||
i["arch"],
|
||||
i["checksum"],
|
||||
i["downloadHref"],
|
||||
i["filename"],
|
||||
i["datePublished"],
|
||||
]
|
||||
)
|
||||
print(tabulate(table, headers="firstrow"))
|
||||
elif args.format == "json":
|
||||
print(json.dumps(images, indent=4))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
# #!/bin/bash
|
||||
# # set the offline token and checksum parameters
|
||||
# offline_token="<offline_token>"
|
||||
# checksum=<checksum>
|
||||
#
|
||||
# # get an access token
|
||||
# access_token=$(curl
|
||||
# https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
|
||||
# -d grant_type=refresh_token
|
||||
# -d client_id=rhsm-api
|
||||
# -d refresh_token=$offline_token | jq -r '.access_token')
|
||||
#
|
||||
# # get the filename and download url
|
||||
# image=$(
|
||||
# curl
|
||||
# -H "Authorization: Bearer $access_token"
|
||||
# "https://api.access.redhat.com/management/v1/images/$checksum/download"
|
||||
# )
|
||||
# filename=$(echo $image | jq -r .body.filename)
|
||||
# url=$(echo $image | jq -r .body.href)
|
||||
#
|
||||
# # download the file
|
||||
# curl $url -o $filename
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
requests~=2.32.3
|
||||
tabulate~=0.9.0
|
||||
Loading…
Add table
Add a link
Reference in a new issue