Aller au contenu principal

Administration Guides

Import packages​

Configurer le tenant cible​

Vos packages seront envoyé sur le registre de paquet dans le tenant que vous configurez. Le tenant public installé par défaut est Athea. Aucune valeur par défaut n'est prévu pour cette configuration afin d'éviter d'exposer des paquets privé dans le tenant publique.

config:
registry:
tenant: "athea"
[...]
[...]

Configurer un bucket source​

Lorsque vous installez le Package Importer, vous pouvez fournir une liste de bucket Ă  surveiller ainsi que le type de package qui seront attendus dedans (python, maven, ...) :

config:
[...]
sources:
- kind: python
bucket: "pkg-python"
- kind: generic
bucket: "pkg-gen"
[...]

Importer un package​

  • via l'UI de Minio

Connectez-vous au S3 auquel l'importer est lié et téléchargez votre package dans le bon bucket (référez vous à la configuration du package importer, eg: dans notre exemple, un package python dans le bucket pkg-python) le Package Importer téléchargera le package et essayera d'importer son contenu dans le dépôt de packages. Une fois la tentative terminée, les informations sur le résultat seront ajoutés sous forme de tag s3 sur l'objet dans S3 :

  • kosmos-pkg-import-status : Indique si le job a rĂ©ussi (success) ou Ă©chouĂ© (failure).

  • kosmos-pkg-import-ts : La date Ă  laquelle la tentative s'est terminĂ© au format RFC3339.

  • via un pod mc (ex: avec l'archive offline-package-pip-3-0-0.tar.gz ):



# ex: import python
archive=offline-package-pip-3-0-0.tar.gz # offline-package-NNN-X.Y.Z.tar.gz
bucket=pkg-python # pkg-python, pkg-mvn, pkg-npm, pkg-generic, pkg-r, pkg-go

s3_username=$(kubectl -n kosmos-s3 get secrets minio-secrets -o jsonpath={.data.accessKey} | base64 -d)
s3_password=$(kubectl -n kosmos-s3 get secrets minio-secrets -o jsonpath={.data.secretKey} | base64 -d)
mkdir -p /data/generated
cat <<-EOF >"/data/generated/import-s3.sh"
#!/bin/bash
mc alias --insecure set kosmos-s3 https://s3-api-admin.technique.artemis $s3_username $s3_password
mc cp --insecure /data/${archive} kosmos-s3/${bucket}/
EOF
chmod a+x /data/generated/import-s3.sh
podman run -v /data:/data --entrypoint /data/generated/import-s3.sh kosmos-registry.technique.artemis/athea/minio/mc:RELEASE.2025-08-13T08-35-41Z
rm -f /data/generated/import-s3.sh

Utilisation avancée​

Suivre l'avancement de l'import​

Vous pouvez consulter les journaux de l'application pour savoir ce que l'importeur de paquets est en train de faire ou quelle erreur il a rencontrée :

kubectl logs -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -f
Ignorer l'upload sur S3​

Il est possible d'ignorer l'upload vers S3 en copiant directement votre paquet dans un des pods du Package Importer et en utilisant manuellement le script qui téléverse vers le gestionnaire de dépôts.

Une fois dans le pod, vous aurez accès à plusieurs scripts :

  • package-import-offline-generic.sh : UtilisĂ© pour tĂ©lĂ©verser des archives gĂ©nĂ©riques
  • package-import-offline-mvn.sh : UtilisĂ© pour tĂ©lĂ©verser des paquets Java
  • package-import-offline-npm.sh : UtilisĂ© pour tĂ©lĂ©verser des paquets NPM
  • package-import-offline-pip.sh : UtilisĂ© pour tĂ©lĂ©verser des paquets Python

Voici un exemple avec un paquet Python nommé offline-package-pip.tar.gz :

# Get Gitea credentials
GITEA_ADMIN_USER=$(kubectl -n kosmos-dev-restricted get secret gitea-admin-secret -o jsonpath="{.data.username}" | base64 -d; echo)
GITEA_ADMIN_PASSWORD=$(kubectl -n kosmos-dev-restricted get secret gitea-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo)

# Copy python libraries to import pod
kubectl cp offline-package-pip.tar.gz -n kosmos-dev-restricted $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}'):/data

# Upload python libraries into Gitea
kubectl exec -n kosmos-dev-restricted -it $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}') -- bash -c "./package-import-offline-pip.sh -r gitea-http.kosmos-dev-restricted.svc.cluster.local:3000 -t athea -u $GITEA_ADMIN_USER -p $GITEA_ADMIN_PASSWORD /data/offline-package-pip.tar.gz"

# Clean the PVC afterward
kubectl exec -n kosmos-dev-restricted -it $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}') -- bash -c "rm /data/offline-package-pip.tar.gz"
kubectl exec -n kosmos-dev-restricted -it $(kubectl get pods -n kosmos-dev-restricted -l app.kubernetes.io/instance=import-packages -o jsonpath='{.items[0].metadata.name}') -- bash -c "rm -rf /data/offline-package-pip/"

Les scripts proposent une option --help si vous avez besoin de plus d'informations.

Supprimer automatiquement les archives d'imports​

Vous pouvez utiliser le Lifecycle Management de S3 afin de supprimer les packages après un certain temps nombre de jours afin d'éviter de remplir inutilement le S3. Pour cela :

  • Connectez-vous Ă  la console S3 avec assez de privilèges pour voir la section Administrator
  • Cliquez sur l'onglet Buckets
  • Cliquez sur votre bucket (eg: pkg-python)
  • Cliquez sur l'onglet Lifecycle
  • Cliquez sur el bouton Add Lifecycle Rule + :
    • Dans le champ After mettez le maximum de jours qu'un fichier peut rester avant d'ĂŞtre supprimĂ©. N'importe quel fichier, s'il valide les règles de filtrage (sans règle, tous les fichiers sont concernĂ©s) sera supprimĂ© une fois plus vieux que cette valeur.
    • La section Filters permet de restreindre les objets auxquels la règle de suppression s'applique. Si vous souhaitez par exemple ne supprimer que les imports rĂ©ussis :
      • Cliquez sur la liste dĂ©roulante Filters :
        • Dans la section Tags, ajoutez une ligne :
          • Tag Key doit prendre la valeur kosmos-pkg-import-status
          • Tag Value doit prendre la valeur success
      • Avec cette configuration, n'importe quel fichier plus vieux que X jours (X Ă©tant votre nombre de jours configurĂ©) ET qui a le tag kosmos-pkg-import-status avec comme valeur success sera supprimĂ©.
info
  • Minio calcule l'age par rapport Ă  la date de tĂ©lĂ©chargement sur le cluster et non pas de l'ajout du TAG !
  • Minio ne supporte que les nombres entiers et uniquement le nombre de jours comme unitĂ©, il n'est donc pas possible de descendre en dessous d'une journĂ©e.