Пакет Azure. Повышение привилегий пользователя при создании пула с помощью интерфейса командной строки Azure - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно подключить хранилище файлов Azure к Linux-пулам, когда они запускаются. Я следую приведенным здесь инструкциям, чтобы добиться этого: подключение хранилища файлов Azure к пакетному Специально в моемСценарий Azure CLI в командах запуска Pools Я вставляю что-то, похожее на это

--start-task-command-line="apt-get update && apt-get install cifs-utils && mkdir -p {} && mount -t cifs {} {} -o vers=3.0,username={},password={},dir_mode=0777,file_mode=0777,serverino".format(_COMPUTE_NODE_MOUNT_POINT, _STORAGE_ACCOUNT_SHARE_ENDPOINT, _COMPUTE_NODE_MOUNT_POINT, _STORAGE_ACCOUNT_NAME, _STORAGE_ACCOUNT_KEY)

, но когда я запускаю задачи с помощью автоматического пользователя, который по умолчанию использует пакет, я получаю сообщение об ошибке в файле stderr.txtфайл, в котором упоминается, что он не смог создать каталог "/ mnt / MyAzureFileshare", и поэтому я предполагаю, что монтирование не происходило во время процесса создания пула. Я видел вопрос, очень похожий на тот, с которым я столкнулся: параметрпользовательское удостоверение пользователя для задач и даже официальная документация Microsoft подробно описывают это: Запуск задач в учетных записях пользователей в пакетном режиме , но ни одна из них не проливает свет на то, как этого добиться с помощью Azure CLI.

Чтобы установить определенные пакеты для монтирования хранилища файлов Azure, требуется sudo privilи я не могу сделать это через Azure-CLI.Чтобы воссоздать ошибку, я бы порекомендовал взглянуть на это приложение: , чтобы воспроизвести проблему

Чего я хочу добиться:

1)Создайте пул с установленным на нем хранилищем файлов Azure и увеличьте привилегии автопользователя до уровня администратора с помощью Azure CLI

2) Запускать задачи с тем же автоматическим пользователемс правами администратора с помощью Azure CLI

Обновление 1: Мне удалось смонтировать хранилище файлов Azure с помощью пакета с помощью интерфейса командной строки Azure.Я все еще не могу заполнить хранилище файлов Azure выходными файлами приложения, которое я развернул на пакетных узлах. У меня нет ошибок в файлах stderr.txt.Выходные данные файла stderr.txt:

WARNING: In "login" auth mode, the following arguments are ignored: --account-key

Alive[################################################################]  100.0000%
Finished[#############################################################]  100.0000%

pdf--->png:   0%|          | 0/1 [00:00<?, ?it/s]
pdf--->png: 100%|##########| 1/1 [00:00<00:00,  1.16it/s]WARNING: In "login" auth mode, the following arguments are ignored: --account-key
WARNING: uploading /mnt/batch/tasks/workitems/pdf-processing-job-2018-10-29-15-36-15/job-1/mytask-0/wd/png_files-2018-10-29-15-39-25/akronbeaconjournal_20180108_AkronBeaconJournal_0___page---0.png

Alive[################################################################]  100.0000%
Finished[#############################################################]  100.0000%

Приложение Python, развернутое на пакетных узлах:

import os
import fitz
import subprocess
import argparse
import time
from tqdm import tqdm
import sentry_sdk
import sys
import datetime

def azure_active_directory_login(azure_username,azure_password,azure_tenant):
    try:
        azure_login_output=subprocess.check_output(["az","login","--service-principal","--username",azure_username,"--password",azure_password,"--tenant",azure_tenant])
    except subprocess.CalledProcessError:
        sentry_sdk.capture_message("Invalid Azure Login Credentials")
        sys.exit("Invalid Azure Login Credentials")

def download_from_azure_blob(azure_storage_account,azure_storage_account_key,input_azure_container,file_to_process,pdf_docs_path):
    file_to_download=os.path.join(input_azure_container,file_to_process)
    try:
        subprocess.check_output(["az","storage","blob","download","--container-name",input_azure_container,"--file",os.path.join(pdf_docs_path,file_to_process),"--name",file_to_process,"--account-key",azure_storage_account_key,\
        "--account-name",azure_storage_account,"--auth-mode","login"])
    except subprocess.CalledProcessError:
        sentry_sdk.capture_message("unable to download the pdf file")
        sys.exit("unable to download the pdf file")

def pdf_to_png(input_folder_path,output_folder_path):
    pdf_files=[x for x in os.listdir(input_folder_path) if x.endswith((".pdf",".PDF"))]
    pdf_files.sort()
    for pdf in tqdm(pdf_files,desc="pdf--->png"):
        doc=fitz.open(os.path.join(input_folder_path,pdf))
        page_count=doc.pageCount
        for f in range(page_count):
            page=doc.loadPage(f)
            pix = page.getPixmap()
            if pdf.endswith(".pdf"):
                png_filename=pdf.split(".pdf")[0]+"___"+"page---"+str(f)+".png"
                pix.writePNG(os.path.join(output_folder_path,png_filename))
            elif pdf.endswith(".PDF"):
                png_filename=pdf.split(".PDF")[0]+"___"+"page---"+str(f)+".png"
                pix.writePNG(os.path.join(output_folder_path,png_filename))


def upload_to_azure_blob(azure_storage_account,azure_storage_account_key,output_azure_container,png_docs_path):
    try:
        subprocess.check_output(["az","storage","blob","upload-batch","--destination",output_azure_container,"--source",png_docs_path,"--account-key",azure_storage_account_key,\
        "--account-name",azure_storage_account,"--auth-mode","login"])
    except subprocess.CalledProcessError:
        sentry_sdk.capture_message("Unable to upload file to the container")

def upload_to_fileshare(png_docs_path):
    try:
        subprocess.check_output(["cp","-r",png_docs_path,"/mnt/MyAzureFileShare/"])
    except subprocess.CalledProcessError:
        sentry_sdk.capture_message("unable to upload to azure file share ")

if __name__=="__main__":
    #Credentials 
    sentry_sdk.init("<Sentry Creds>")
    azure_username=<azure_username>
    azure_password=<azure_password>
    azure_tenant=<azure_tenant>
    azure_storage_account=<azure_storage_account>
    azure_storage_account_key=<azure_account_key>
    try:
        parser = argparse.ArgumentParser()
        parser.add_argument("input_azure_container",type=str,help="Location to download files from")
        parser.add_argument("output_azure_container",type=str,help="Location to upload files to")
        parser.add_argument("file_to_process",type=str,help="file link in azure blob storage")
        args = parser.parse_args()
        timestamp = time.time()
        timestamp_humanreadable= datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d-%H-%M-%S')
        task_working_dir=os.getcwd()
        file_to_process=args.file_to_process
        input_azure_container=args.input_azure_container
        output_azure_container=args.output_azure_container
        pdf_docs_path=os.path.join(task_working_dir,"pdf_files"+"-"+timestamp_humanreadable)
        png_docs_path=os.path.join(task_working_dir,"png_files"+"-"+timestamp_humanreadable)
        os.mkdir(pdf_docs_path)
        os.mkdir(png_docs_path)
    except Exception as e:
        sentry_sdk.capture_exception(e)
    azure_active_directory_login(azure_username,azure_password,azure_tenant)
    download_from_azure_blob(azure_storage_account,azure_storage_account_key,input_azure_container,file_to_process,pdf_docs_path)
    pdf_to_png(pdf_docs_path,png_docs_path)
    upload_to_azure_blob(azure_storage_account,azure_storage_account_key,output_azure_container,png_docs_path)
    upload_to_fileshare(png_docs_path)

upload_to_fileshare () в приведенном выше приложении python должноинициировать загрузку, но в моем случае ничего не происходит, и в операции копирования в файлах stderr.txt нет ошибок

Пожалуйста, дайте мне знать способ устранения этой проблемы

1 Ответ

0 голосов
/ 26 октября 2018

Не похоже, что параметр повышенного запуска выставляется через аргумент командной строки через CLI.Однако вы можете указать JSON-файл для аргумента --json, отформатированный как объект REST API, чтобы получить все функциональные возможности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...