sparse-intern-71089
02/18/2022, 2:22 PMfreezing-van-87649
02/18/2022, 2:32 PMpulumi stack export --helpsparse-gold-10561
02/18/2022, 2:35 PMsparse-gold-10561
02/18/2022, 4:54 PMimport http
import json
import logging
import boto3
from botocore.config import Config
config = Config(
   retries = {
      'max_attempts': 6,
      'mode': 'adaptive'
   }
)
backup_bucket = "my-backups"
main_org = "MyOrg"
def get_pulumi_data(type: str, org: str, project: str = None, stack: str = None):
    client = boto3.client('ssm', config=config)
    pulumi_key = client.get_parameter(Name="pulumi.access.token", WithDecryption=True)['Parameter']['Value']
    headers = {"Authorization": "token "+pulumi_key}
    conn = http.client.HTTPSConnection("<http://api.pulumi.com|api.pulumi.com>")
    if type == 'stacks':
        conn.request(method="GET", url="/api/user/stacks?organization="+org, headers=headers)
    if type == 'export':
        conn.request(method="GET", url="/api/stacks/"+ org +"/"+ project +"/"+ stack +"/export", headers=headers)
    response = conn.getresponse().read()
    conn.close()
    return json.loads(response)
def backup_pulumi_stack(org: str, project: str, stack: str):
    stack_state = get_pulumi_data(type="export", org=org, project=project, stack=stack)
    s3 = boto3.resource('s3')
    backup_file = s3.Object(backup_bucket, org+"-"+project+"-"+stack+".json")
    s3_result = backup_file.put(Body=json.dumps(stack_state))
    if s3_result.get("ResponseMetadata").get("HTTPStatusCode") == 200:
        print("Pulumi state for "+project+"/"+stack+" backed up successfully")
    else:
        print("Unable to backup Pulumi state for "+project+"/"+stack)
pulumi_data = get_pulumi_data(type="stacks", org=main_org)
    
for data in pulumi_data['stacks']:
    backup_pulumi_stack(org=data['orgName'], project=data['projectName'], stack=data['stackName'])sparse-gold-10561
02/18/2022, 4:54 PM