Использование оператора If для вызова функций в Python - PullRequest
1 голос
/ 26 февраля 2020

Я выполняю код для создания стека облачной информации, удаления стека, обновления стека с определенной переменной параметра, используя файл json, используя python.

Я определил 3 различных оператора в функции init (). Мне нужно поставить условие if: если я хочу создать стек, он вызовет «create_products», обновит стек, вызовет «update_products» elif, удалит стек, обновит «delete_products»

from __future__ import print_function
import subprocess
import json
import yaml
import sys
import os
import re
import boto3
from glob import glob

def createstack(productName, productId, paramlist): 
    try:
        client = boto3.client('servicecatalog', region_name='us-east-1')
        ProvisioningArtifactId = client.list_provisioning_artifacts(ProductId=productId)
        ArtifactId = ProvisioningArtifactId['ProvisioningArtifactDetails'][0]['Id']
        response = client.provision_product(ProvisionedProductName=productName, ProductId=productId, ProvisioningArtifactId=ArtifactId, ProvisioningParameters=paramlist)
        print(response)
    except Exception as e:
        error = "An error occurred processing this request: " + str(e)
        print(error) 

def updatestack(productName, productId, paramlist):    
    try:
        client = boto3.client('servicecatalog', region_name='us-east-1')
        ProvisioningArtifactId = client.list_provisioning_artifacts(ProductId=productId)
        ArtifactId = ProvisioningArtifactId['ProvisioningArtifactDetails'][0]['Id']
        response = client.update_provisioned_product(ProvisionedProductName=productName, ProductId=productId, ProvisioningArtifactId=ArtifactId, ProvisioningParameters=paramlist)
        print(response)
    except Exception as e:
        error = "An error occurred processing this request: " + str(e)
        print(error)

def deletestack(productName):
    try:
        client = boto3.client('servicecatalog', region_name='us-east-1')
        response = client.terminate_provisioned_product(ProvisionedProductName=productName)
        print(response)
        return response
    except Exception as e:
        error = "An error occurred processing this request: " + str(e)
        return(error)

def init():
    #global args
    with open("list_provisional_product.json") as f:
        product_list = json.load(f)
    with open("testing-pipeline-params.json") as f:
        baselist = json.load(f)

    for product in product_list["update_products"]:
        for provisioned_product_name in product["provisioned_product_names"]:
            updatestack(productName=provisioned_product_name, productId=product["product_id"], paramlist=baselist[provisioned_product_name])

    for product in product_list["delete_products"]:
        for provisioned_product_name in product["provisioned_product_names"]:
            deletestack(productName=provisioned_product_name)

    for product in product_list["create_products"]:
        for provisioned_product_name in product["provisioned_product_names"]:
            createstack(productName=provisioned_product_name, productId=product["product_id"], paramlist=baselist[provisioned_product_name])


def main():
    init()
if __name__== "__main__": 
    main()

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Большое спасибо, Вивек! Я бы предпочел go с подходом 1-й ie argv, и это на самом деле сработало, исходя из моих потребностей !! BRAVO

0 голосов
/ 26 февраля 2020

Да, вы должны получить имя операции (Создать / Обновить / Удалить) от пользователя через аргумент командной строки или спросить пользователя во время выполнения кода с помощью функции input.

Демонстрация 1 : Получить имя операции из аргумента командной строки, используя sys.argv Вам нужно дать имя операции, когда вы запускаете код python. Здесь имя файла Py: if_loop.py

import sys
print("arg:", sys.argv)

try:
    operation_name = sys.argv[1].lower()
except IndexError:
    print("Argument is missing")
    exit()

if operation_name == "create":
    print("Call Create function")
elif operation_name == "update":
    print("Call Update function")
elif operation_name == "delete":
    print("Call Dale function")
else:
    print("Invalid Operation name")

Выход

Invalid Operation name
(env) PS C:\Users\vivek\Documents\Workplace\stackoverflow> python .\if_loop.py Create
arg: ['.\\if_loop.py', 'Create']
Call Create function

Демонстрация 2 : Использование функции input

operation_name = input("Give Operation Name:").lower()
if operation_name == "create":
    print("Call Create function")
elif operation_name == "update":
    print("Call Update function")
elif operation_name == "delete":
    print("Call Dale function")
else:
    print("Invalid Operation name")

Выход

Give Operation Name:Update
Call Update function
...