Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

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