<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1678611822423757&amp;ev=PageView&amp;noscript=1">
Defrag This

| Read. Reflect. Reboot.

Utilisation de la nouvelle API REST de MOVEit 2018 pour créer une tâche MOVEit avec Python

Adam Bertram| July 17 2018

| security, MOVEit, API REST

using-moveit-2018s-new-rest-api-to-create-a-moveit-task-with-python

Nous avons beaucoup discuté de la façon dont vous pouvez utiliser PowerShell avec MOVEit Automation 2018 dans le but d'automatiser des tâches. Mais comment faire si vous préférez utiliser Python ? Ce n'est pas un problème pour nous. Voyons cela de plus près.


Dans un article récent consacré à l'utilisation de l'API REST pour MOVEit Automation 2018 nous avons utilisé PowerShell comme client. Adoptons un angle différent cette fois et découvrons comment utiliser le langage de création de scripts Python pour réaliser ces mêmes tâches.

Nous reprendrons la même tâche en guise d'exemple, comme dans l'article consacré à PowerShell, afin de ne pas comparer des pommes avec des poires lors de la création et de la surveillance des tâches. Notre tâche commence avec quelques fichiers dans un dossier hébergé sur mon serveur MOVEit 2018. Je souhaite transférer l'ensemble de ces fichiers vers un Bucket Amazon S3. Voyons comment créer et démarrer cette tâche avec Python.

Automatisez vos flux de travail sans devoir recourir à des scripts. Testez  MOVEit Automation

Authentification

En référence à un précédent article expliquant comment procéder à une authentification sur l'API REST de MOVEit Automation, je vais reprendre la même approche. Sauf que cette fois, j'utiliserai Python au lieu de PowerShell.

Tout d'abord, je vais m'assurer de définir toutes les variables représentant les différentes URL, les chemins d'accès et les informations d'authentification dont j'aurai besoin par la suite.

base_uri = 'https://<YourMoveITAutomationServerNameHere>'
token_path = '/webadmin/api/v1/token'
uri_path = '/webadmin/api/v1/tasks'
api_endpoint = base_uri + token_path
tasks_url = base_uri + uri_path
userName = '<myusername>'
password = '<mypassword>'

Ensuite, je vais avoir besoin d'un jeton d'authentification. Python comporte un module appelé « requests » que nous pouvons utiliser pour envoyer une requête HTTP GET à l'API. Nous allons devoir importer cela. Comme je travaille avec un serveur MOVEit disposant d'un certificat auto-signé, je dois préciser à Python d'ignorer l'avertissement de sécurité que je vais recevoir lors de l'utilisation de la méthode disable_warnings() dans la bibliothèque urllib3.

Enfin, je vais créer un dictionnaire afin de conserver tous les attributs d'authentification que je vais devoir transmettre au serveur une fois la requête effectuée.

import requests

# Is this a self signed cert enable this to ignore SSL errors
requests.packages.urllib3.disable_warnings()

payload = {'username': userName, 'password': password, 'grant_type': 'password'}

Maintenant que nous sommes prêts à envoyer la requête, je vais procéder de la sorte afin d'attribuer le jeton récupéré à la variable my_token.

r = requests.post(api_endpoint, data=payload, verify=False)

#Auth token to be used by successive requests
my_token = r.json()['access_token']

Création de la tâche

Lorsque j'examine l'interface utilisateur Swagger dans MOVEit, je remarque une opération qui ressemble exactement à ce dont j'ai besoin. La description « adds a new task » (ajoute une nouvelle tâche) parle d'elle-même.

Automatisez vos flux de travail. Téléchargez une version d’évaluation de  MOVEit Automation

Lorsque je clique dessus, je constate que je vais devoir indiquer l'API avec un objet JSON, représentant la tâche que je souhaite créer et à partir de l'exemple d'objet JSON fourni, j'ai réussi à créer un objet JSON représentant la tâche que je souhaite créer.

{
    "Info": {
        "Description": "This task moves some files locally to an AWS S3 bucket on demand."
    },
    "steps": [
        {
            "Source": {
                "HostID": "0",
                "Path": "C:\\Temp",
                "Type": "FileSystem"
            }
        },
        {
            "Destination": {
                "HostID": "730111199",
                "Type": "S3"
            }
        }
    ],
    "Name": "Copy Files to S3 Bucket",
    "Active": 1
}

Maintenant que j'ai créé l'objet JSON, je vais copier cet objet JSON dans un fichier appelé DemoTask.json en local sur mon ordinateur. Ensuite, je dois insérer cet objet JSON dans une chaîne avant de pouvoir terminer et l'envoyer à l'API.

La méthode load() du module json me permet de créer un objet JSON. Toutefois, je dois d'abord me rappeler d'importer mon module json.

import json

#convert json file to python dictionary
with open('/Users/adam/Desktop/DemoTask.json') as json_data:
    job_json = json.load(json_data)

À ce stade, j'ai maintenant tout ce dont j'ai besoin pour créer un appel d'API vers l'API MOVEit afin de créer cette requête.

#Create new Task
new_task = requests.post(tasks_url, headers={'Content-Type': 'application/json;charset=UTF-8', 'Authorization': 'Bearer {}'.format(my_token)},json=job_json, verify=False)

Je devrais maintenant avoir créé une tâche appelée Copy Files to S3 Bucket (Copier les fichiers vers le Bucket S3). Pour m'en assurer, je vais envoyer une requête à l'API en utilisant le nom de la tâche.

task_name = 'Copy Files to S3 Bucket'
query_url = tasks_url + '?name=' + task_name

task_query = requests.get(query_url, headers={'Content-Type': 'application/json;charset=UTF-8', 'Authorization': 'Bearer {}'.format(my_token)}, verify=False)
task_json = json.loads(task_query.content)

Je vais vérifier qu'il s'agit de la tâche correcte en examinant l'objet JSON obtenu en réponse. Comme vous le constatez, c'est bien cela !

>>> task_json
{u'Info': {u'Notes': u'', u'Description': u'This task moves some files locally to an AWS S3 bucket on demand.'}, u'Group': [], u'Name': u'Copy Files to S3 Bucket', u'UseDefStateCaching': 1, u'CacheNames': u'random', u'TT': u'', u'NextActions': {}, u'NextEID': 13, u'AR': 0, u'steps': [{u'Source': {u'UseDefRetryTimeoutSecs': 1, u'ExFo': u'', u'NewFilesOnly': 0, u'DeleteOrig': 0, u'RetryCount': 0, u'SearchSubdirs': 0, u'Type': u'FileSystem', u'Unzip': 0, u'ExFile': u'', u'Path': u'C:\\Temp', u'RetryTimeoutSecs': 0, u'HostID': u'0', u'DelRename': 1, u'FileMask': u'*.*', u'UseDefRescanSecs': 1, u'RenameTo': u'', u'ID': u'11', u'MxBy': 0, u'RescanSecs': 0, u'RetryIfNoFiles': 0, u'UseDefRetryCount': 1, u'MxFi': 0}}, {u'Destination': {u'UseDefRetryTimeoutSecs': 1, u'Zip': 0, u'OverwriteOrig': 1, u'RetryCount': 0, u'Type': u'S3', u'Username': u'', u'UseRelativeSubdirs': 1, u'UseDefBucket': 1, u'Path': u'', u'Password': u'', u'RetryTimeoutSecs': 0, u'HostID': u'730111199', u'ConnTimeoutSecs': 0, u'Bucket': u'', u'UseDefUser': 1, u'UseDefRescanSecs': 1, u'UseOrigName': 1, u'ID': u'12', u'ForceDir': 1, u'FileName': u'[OrigName]', u'RescanSecs': 0, u'UseDefConnTimeoutSecs': 1, u'UseDefRetryCount': 1}}], u'Schedules': {u'Schedule': []}, u'Active': 1, u'ID': u'218513542'}

Démarrage de la tâche

Nous pouvons maintenant, si nous le souhaitons, démarrer la tâche en créant l'URL de démarrage appropriée, puis en utilisant cette URL pour renvoyer l'appel d'API. Au-dessous, je regarde la propriété de contenu de la réponse afin de vérifier que la tâche a bien démarré.

task_id = task_json['items'][0]['ID']
#Create start task url
start_url = "{}/{}/start".format(tasks_url, task_id)

#Initiate job
start_result = requests.post(start_url, headers={'Content-Type': 'application/json;charset=UTF-8', 'Authorization': 'Bearer {}'.format(my_token)}, verify=False)

>>> print(start_result.content)
{"nominalStart":"2018-04-25 20:07:53.54"}

New Call-to-action

Topics: security, MOVEit, API REST

Leave a Reply

Your email address will not be published. Required fields are marked *

THIS POST WAS WRITTEN BY Adam Bertram

Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.

Free Trials

Getting started has never been easier. Download a trial today.

Download Free Trials

Contact Us

Let us know how we can help you. Focus on what matters. 

Send us a note

Subscribe to our Blog

Let’s stay in touch! Register to receive our blog updates.