init
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
nexus_url_base = 'https://nexus-test.devops.lmru.tech/service/rest/v1/repositories'
|
||||
nexus_username = 'admin'
|
||||
nexus_password = 'nexus'
|
||||
|
||||
with open('artifactory_repositories.json', 'r') as file:
|
||||
artifactory_repositories = json.load(file)
|
||||
|
||||
headers = {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
|
||||
repo_type_mapping = {
|
||||
'LOCAL': 'hosted',
|
||||
'REMOTE': 'proxy',
|
||||
'VIRTUAL': 'group'
|
||||
}
|
||||
|
||||
format_url_mapping = {
|
||||
'maven': 'maven',
|
||||
'npm': 'npm',
|
||||
'nuget': 'nuget',
|
||||
'docker': 'docker',
|
||||
'pypi': 'pypi',
|
||||
'rubygems': 'rubygems',
|
||||
'yum': 'yum',
|
||||
'debian': 'apt',
|
||||
'generic': 'raw',
|
||||
'go': 'go',
|
||||
'gradle': 'gradle',
|
||||
'helm': 'helm',
|
||||
'cocoapods': 'cocoapods'
|
||||
}
|
||||
|
||||
default_attributes = {
|
||||
'maven': {
|
||||
'versionPolicy': 'RELEASE',
|
||||
'layoutPolicy': 'STRICT'
|
||||
},
|
||||
'nugetProxy': {
|
||||
'queryCacheItemMaxAge': 1440,
|
||||
'nugetVersion': 'V3'
|
||||
},
|
||||
'dockerProxy': {
|
||||
'indexType': 'REGISTRY'
|
||||
},
|
||||
'apt': {
|
||||
'flat': False,
|
||||
'distribution': 'default'
|
||||
},
|
||||
'proxyDefaults': {
|
||||
'contentMaxAge': 1440,
|
||||
'metadataMaxAge': 1440
|
||||
}
|
||||
}
|
||||
|
||||
for repo in artifactory_repositories:
|
||||
repo_name = repo['key']
|
||||
repo_type = repo_type_mapping.get(repo['type'])
|
||||
package_type = repo.get('packageType').lower()
|
||||
|
||||
format_url = format_url_mapping.get(package_type)
|
||||
|
||||
if not format_url:
|
||||
print(f"Unknown package type {package_type} for {repo_name}")
|
||||
continue
|
||||
|
||||
nexus_url = f"{nexus_url_base}/{format_url}/{repo_type}"
|
||||
|
||||
if repo_type == 'proxy':
|
||||
config = {
|
||||
"name": repo_name,
|
||||
"online": True,
|
||||
"storage": {
|
||||
"blobStoreName": "nexus-test",
|
||||
"strictContentTypeValidation": True
|
||||
},
|
||||
"proxy": {
|
||||
"remoteUrl": repo['url'],
|
||||
"contentMaxAge": default_attributes['proxyDefaults']['contentMaxAge'],
|
||||
"metadataMaxAge": default_attributes['proxyDefaults']['metadataMaxAge']
|
||||
},
|
||||
"negativeCache": {
|
||||
"enabled": True,
|
||||
"timeToLive": 1440
|
||||
},
|
||||
"httpClient": {
|
||||
"blocked": False,
|
||||
"autoBlock": True
|
||||
},
|
||||
"routingRuleName": None,
|
||||
"format": format_url
|
||||
}
|
||||
|
||||
if format_url == 'docker':
|
||||
config['dockerProxy'] = default_attributes['dockerProxy']
|
||||
config['docker'] = {
|
||||
"v1Enabled": False,
|
||||
"forceBasicAuth": True
|
||||
}
|
||||
|
||||
if format_url == 'apt':
|
||||
config['apt'] = default_attributes['apt']
|
||||
config['apt']['distribution'] = repo.get('distribution', 'default')
|
||||
|
||||
if format_url == 'yum':
|
||||
config['yum'] = {}
|
||||
|
||||
if format_url == 'maven':
|
||||
config["maven"] = default_attributes['maven']
|
||||
|
||||
if format_url == 'nuget':
|
||||
config["nugetProxy"] = default_attributes['nugetProxy']
|
||||
|
||||
elif repo_type == 'hosted':
|
||||
config = {
|
||||
"name": repo_name,
|
||||
"online": True,
|
||||
"storage": {
|
||||
"blobStoreName": "nexus-test",
|
||||
"strictContentTypeValidation": True,
|
||||
"writePolicy": 'ALLOW'
|
||||
},
|
||||
"cleanup": None,
|
||||
"component": {
|
||||
"proprietaryComponents": False
|
||||
},
|
||||
"format": format_url
|
||||
}
|
||||
|
||||
if format_url == 'docker':
|
||||
config['docker'] = {
|
||||
"v1Enabled": False,
|
||||
"forceBasicAuth": True
|
||||
}
|
||||
if format_url == 'maven':
|
||||
config["maven"] = default_attributes['maven']
|
||||
if format_url == 'yum':
|
||||
config['yum'] = {}
|
||||
|
||||
elif repo_type == 'group':
|
||||
config = {
|
||||
"name": repo_name,
|
||||
"online": True,
|
||||
"storage": {
|
||||
"blobStoreName": "nexus-test",
|
||||
"strictContentTypeValidation": True
|
||||
},
|
||||
"group": {
|
||||
"memberNames": repo['repositories']
|
||||
},
|
||||
"format": format_url
|
||||
}
|
||||
|
||||
if format_url == 'docker':
|
||||
config['docker'] = {
|
||||
"v1Enabled": False,
|
||||
"forceBasicAuth": True
|
||||
}
|
||||
if format_url == 'maven':
|
||||
config["maven"] = default_attributes['maven']
|
||||
|
||||
else:
|
||||
print(f"Unknown repository type {repo['type']} for {repo_name}")
|
||||
continue
|
||||
|
||||
|
||||
try:
|
||||
response = requests.post(nexus_url, headers=headers, auth=(nexus_username, nexus_password), data=json.dumps(config))
|
||||
|
||||
if response.status_code == 201:
|
||||
print(f"Repository {repo_name} successfully created")
|
||||
else:
|
||||
try:
|
||||
response_json = response.json()
|
||||
if isinstance(response_json, dict):
|
||||
if "duplicated key" in response_json.get("message", ""):
|
||||
print(f"!!! Repository {repo_name} already exists")
|
||||
else:
|
||||
print(f"Error creating repository {repo_name}: {response.status_code} {response.text}")
|
||||
else:
|
||||
print(f"Error creating repository {repo_name}: {response.status_code} {response.text}")
|
||||
except json.JSONDecodeError:
|
||||
print(f"Error creating repository {repo_name}: {response.status_code} {response.text}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Error during request execution: {e}")
|
||||
Reference in New Issue
Block a user