Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti will be decommissioned after Roihu becomes available. Users should clean up unnecessary files and move any required data by the end of August 2026. See the Roihu data preparation instructions for details.

Puhti scratch is very full: keep only active data there and move or delete everything else. No new Puhti scratch quota will be granted.

Allaksen käyttö Pythonilla ja SWIFT-protokollalla

CSC:n ohjeet OpenStackin ja muiden tarvittavien Python-kirjastojen asentamiseen.

Lataa OpenStack RC File v3 viimeisen osion Määritä terminaaliympäristösi OpenStackia varten ohjeiden mukaisesti.

Esimerkeissä tarvittavat Python pip -kirjastot:
python-keystoneclient ja python-swiftclient.

Tämä sivu sisältää Python-skriptejä seuraaviin toimintoihin:

Toiminto
Yhteyden muodostaminen palvelimeen
Ämpärin luominen
Objektin lataaminen palveluun
Ämpärien ja objektien listaaminen
Objektin lataaminen palvelusta
Ämpärien ja objektien poistaminen

Yhteyden luominen

Tämä Python-skripti muodostaa yhteyden palvelimeen:

from keystoneauth1 import session
from keystoneauth1.identity import v3
import os
import swiftclient
from swiftclient.multithreading import OutputManager
from swiftclient.service import SwiftError, SwiftService, SwiftUploadObject


_authurl = os.environ['OS_AUTH_URL']
_auth_version = os.environ['OS_IDENTITY_API_VERSION']
_user = os.environ['OS_USERNAME']
_key = os.environ['OS_PASSWORD']
_os_options = {
    'user_domain_name': os.environ['OS_USER_DOMAIN_NAME'],
    'project_domain_name': os.environ['OS_USER_DOMAIN_NAME'],
    'project_name': os.environ['OS_PROJECT_NAME']
}

conn = swiftclient.Connection(
    authurl=_authurl,
    user=_user,
    key=_key,
    os_options=_os_options,
    auth_version=_auth_version
)

Vaihtoehtoisesti voit syöttää tiedot suoraan skriptiin ladatusta RC-tiedostosta:

import swiftclient

_authurl = 'https://pouta.csc.fi:5001/v3'
_auth_version = '3'
_user = 'John'
_key = 'John1234'
_os_options = {
    'user_domain_name': 'Default',
    'project_domain_name': 'Default',
    'project_name': 'project_123456'
}

conn = swiftclient.Connection(
    authurl=_authurl,
    user=_user,
    key=_key,
    os_options=_os_options,
    auth_version=_auth_version
)

Yllä olevassa esimerkissä:

OS_AUTH_URL = _authurl = https://pouta.csc.fi:5001/v3
OS_IDENTITY_API_VERSION = _auth_version = 3
OS_USERNAME = _user = John
OS_PASSWORD = _key = John1234
OS_PROJECT_NAME = project_name = project_123456

Lisätietoja Keystone-tunnistautumisesta:
https://docs.openstack.org/python-swiftclient/newton/client-api.html

Ämpärin luominen

Luo uusi ämpäri seuraavalla skriptillä:

bucket_name='snakebucket'
conn.put_container(bucket_name)

Objektin lataaminen palveluun

Lataa pieni tiedosto nimeltä my_snake.txt ämpäriin snakebucket:

object_name='my_snake.txt'
with open(object_name, 'r') as f:
    conn.put_object(bucket_name, object_name,
                    contents=f.read(),
                    content_type='text/plain')
Yllä oleva lataus palveluun toimii vain tiedostoille, jotka ovat pienempiä kuin 5 GB. Suurempien tiedostojen tapauksessa kannattaa käyttää SwiftService-toimintoa.

object_list = [ 'my_snake.txt' ]
# limit upload threads to 4
opts = {'object_uu_threads': 4}

with SwiftService(options=opts) as swift:
    try:
        for r in swift.upload(bucket_name, object_list, { 'segment_size': 5000000000, }):
            if r['success']:
                if 'object' in r:
                    print(r['object'])
                elif 'for_object' in r:
                    print(
                        '%s segment %s' % (r['for_object'],
                            r['segment_index'])
                         )
            else:
                print(r)

    except SwiftError as e:
        print(e.value)

Ämpärien ja objektien listaaminen

Listaa kaikki projektiin kuuluvat ämpärit:

resp_headers, containers = conn.get_account()

for container in containers:
   print(container)

Ja kaikki ämpäriin kuuluvat objektit:

for info in conn.get_container('snakebucket')[1]:
    print('{0}\t{1}\t{2}'.format(info['name'], info['bytes'], info['last_modified']))

Objektin lataaminen palvelusta

Lataa objekti palvelusta:

my_obj = conn.get_object(bucket_name, object_name)[1]
with open('new_name_for_file.txt', 'w') as f:
    f.write(my_obj)

Huomaa: Jos saat virheen

TypeError: write() argument must be str, not bytes
avaa tiedosto binaaritilassa
with open('new_name_for_file.txt', 'bw') as f:
    f.write(my_obj)
tekstitilan sijaan.

Ämpärien ja objektien poistaminen

Poista ämpäri:

conn.delete_container(bucket_name)

Huomaa: Vain tyhjät ämpärit voidaan poistaa.

Poista objekti:

conn.delete_object(bucket_name, 'my_snake.txt')

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta