Beispiel #1
0
def make_user(user, settings):
    resource_group = settings["resource_group"]
    storage_account = settings["storage_account"]
    region = settings["region"]

    # create res gr
    check_output_wrapper("""
        az group create \
        -n "{n}" \
        -l "{l}"
        """.format(n=resource_group, l=region),
                         shell=True)

    print("WARN: Add user '{0}' as contributor to '{1}' manually!".format(
        user, resource_group))
    # # assign user to his res gr
    # check_output_wrapper(
    #     """
    #     az role assignment create \
    #     --assignee {user} \
    #     --role Contributor \
    #     --resource-group {rg}
    #     """.format(user=user, rg=resource_group),
    #     shell=True
    # )

    # create storage account
    check_output_wrapper("""
        az storage account create \
        -l {l} \
        -n {n} \
        -g {g} \
        --sku Standard_LRS
        """.format(l=region, n=storage_account, g=resource_group),
                         shell=True)

    # grant images access
    images = [
        "cluster1_image1_eastus", "cluster2_image1_eastus",
        "cluster3_image1_eastus", "ubuntu_gpu_image1_eastus"
    ]
    for image in images:
        pass
        # check_output_wrapper(
        #     """
        #     az role assignment create \
        #         --role Contributor \
        #         --assignee "{user}" \
        #         --scope "/subscriptions/{s}/resourceGroups/admin_resources/providers/Microsoft.Compute/images/{image}"
        #     """.format(image=image, user=user, s=get_subscription_id()),
        #     shell=True
        # )
    print("WARN: Add user '{0}' as contributor to 'admin_resources' manually!".
          format(user))

    print(user, "done")
Beispiel #2
0
def create_image(rg_name, image_name, source, region):
    check_output_wrapper("""
        az image create \
            -g {rg_name} \
            -n {image_name} \
            --source "{source}" \
            --os-type linux \
            -l {region}
        """.format(**locals()),
                         shell=True)
Beispiel #3
0
def assign_role_to_student_group(IMAGE_NAME):
    # for students group
    check_output_wrapper("""
        az role assignment create \
            --role Contributor \
            --assignee "{g}" \
            --scope "/subscriptions/{s}/resourceGroups/admin_resources/providers/Microsoft.Compute/images/{image}"
        """.format(image=IMAGE_NAME,
                   g=get_ad_group_id(AD_GROUP),
                   s=get_subscription_id()),
                         shell=True)
Beispiel #4
0
def create_image(RG_NAME, IMAGE_NAME, SOURCE, REGION):
    check_output_wrapper("""
        az image create \
            -g {RG_NAME} \
            -n {IMAGE_NAME} \
            --source "{SOURCE}" \
            --os-type linux \
            -l {REGION}
        """.format(**locals()),
                         shell=True)
    create_image_lock(RG_NAME, IMAGE_NAME)
    assign_role_to_student_group(IMAGE_NAME)
Beispiel #5
0
def get_vm_status(vm_ids):
    out = check_output_wrapper("""
        az vm show -d --ids {0}
        """.format(" ".join(vm_ids)),
                               shell=True)
    out = json.loads(out)
    return out
Beispiel #6
0
def get_vm_status(VM, RG):
    out = check_output_wrapper("""
        az vm show -d -n {0} -g {1}
        """.format(VM, RG),
                               shell=True)
    if out.strip() == "":
        return None
    out = json.loads(out)
    power_state = out["powerState"]
    return power_state
Beispiel #7
0
def list_orphaned_disks():
    out = check_output_wrapper("""
        az disk list
        """,
                               shell=True)
    if out.strip() == "":
        return None
    out = json.loads(out)
    out = [x for x in out if x["ownerId"] is None]
    out = [x["id"] for x in out]
    return out
Beispiel #8
0
from utils import check_output_wrapper

# import pandas as pd
# pd.read_json("users.json", orient="records").to_excel("users.xlsx")

from utils import generate_pass, STUDENT_COUNT, AD_DOMAIN

users = []

for idx in range(STUDENT_COUNT):
    # if (idx + 1) <= 88:
    #     continue
    password = generate_pass()
    user = "******".format(idx + 1)
    out = check_output_wrapper("""
        az ad user create \
        --user-principal-name "{u}@{d}" \
        --display-name "{u}" \
        --password {p} \
        --mail-nickname "{u}"
        """.format(p=password, u=user, d=AD_DOMAIN),
                               shell=True)
    out = json.loads(out)
    userId = out["objectId"]
    users.append([user, password, userId])
    print(user, "done")

df = pd.DataFrame(users, columns=["user", "password", "userId"])
df.to_json("users.json", orient="records")
Beispiel #9
0
def create_image_lock(RG_NAME, IMAGE_NAME):
    check_output_wrapper("""
        az lock create -t CanNotDelete -n lock -g {RG_NAME} --resource-name "{IMAGE_NAME}" \
        --resource-type "Microsoft.Compute/images"
        """.format(**locals()),
                         shell=True)
Beispiel #10
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess

import pandas as pd

from utils import RG_TEMPLATE, check_output_wrapper

users = pd.read_json("users.json", orient="records")

for idx, (_, row) in enumerate(users.iterrows()):
    if idx < 3:
        continue
    row = dict(row)
    user = row["user"]
    resGrName = RG_TEMPLATE.format(user)
    # create res gr
    check_output_wrapper(
        """
        az group delete \
        -n "{n}" --yes --no-wait
        """.format(n=resGrName),
        shell=True
    )
    print(user, "done")
from utils import RG_TEMPLATE, STORAGE_ACCOUNT_TEMPLATE, region_by_user, check_output_wrapper

users = pd.read_json("users.json", orient="records")

for idx, (_, row) in enumerate(users.iterrows()):
    # if idx + 1 <= 88:
    #     continue
    row = dict(row)
    user = row["user"]
    userId = row["userId"]
    rgName = RG_TEMPLATE.format(user)
    region = region_by_user[user]
    # create res gr
    check_output_wrapper("""
        az group create \
        -n "{n}" \
        -l "{l}"
        """.format(n=rgName, l=region),
                         shell=True)
    # assign user to his res gr
    check_output_wrapper("""
        az role assignment create \
        --assignee {userId} \
        --role Contributor \
        --resource-group {rg}
        """.format(userId=userId, rg=rgName),
                         shell=True)
    # create storage account
    storName = STORAGE_ACCOUNT_TEMPLATE.format(user)
    check_output_wrapper("""
        az storage account create \
        -l {l} \
Beispiel #12
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess

import pandas as pd

from utils import AD_GROUP, get_ad_group_id, check_output_wrapper

check_output_wrapper("""
    az ad group create \
    --display-name {g} \
    --mail-nickname {g}
    """.format(g=AD_GROUP),
                     shell=True)

users = pd.read_json("users.json", orient="records")
group_id = get_ad_group_id(AD_GROUP)

for _, row in users.iterrows():
    row = dict(row)
    userId = row["userId"]
    check_output_wrapper("""
        az ad group member add \
        --group {g} \
        --member-id {u}
        """.format(g=AD_GROUP, u=userId),
                         shell=True)
    print(row["user"], "added to group")
Beispiel #13
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess

from utils import STUDENT_COUNT, AD_DOMAIN, check_output_wrapper

for idx in range(STUDENT_COUNT):
    user = "******".format(idx + 1)
    check_output_wrapper("""
        az ad user delete \
        --upn-or-object-id "{u}@{d}" \
        """.format(u=user, d=AD_DOMAIN),
                         shell=True)
    print(user, "deleted")
Beispiel #14
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess

import pandas as pd

from utils import RG_TEMPLATE, STORAGE_ACCOUNT_TEMPLATE, get_storage_key, check_output_wrapper

users = pd.read_json("users.json", orient="records")

CONTAINER = "images"
PATTERN = "ubuntugpu2.vhd"

for _, row in users.iterrows():
    row = dict(row)
    user = row["user"]
    userId = row["userId"]
    resGrName = RG_TEMPLATE.format(user)
    storName = STORAGE_ACCOUNT_TEMPLATE.format(user)
    userKey = get_storage_key(storName, resGrName)
    check_output_wrapper("""
        az storage blob delete \
        --container-name {cont} \
        --account-key {key} \
        --account-name {acc} \
        --name {fn}
        """.format(cont=CONTAINER, fn=PATTERN, acc=storName, key=userKey),
                         shell=True)
    print(user, "done")
Beispiel #15
0
def get_vm_list():
    out = check_output_wrapper("""
        az vm list
        """, shell=True)
    out = json.loads(out)
    return out