#' List VMs in a Subscription.
#'
#' @inheritParams setAzureContext
#' @inheritParams azureListAllResources
#'
#' @family Virtual machine functions
#' @export
azureListVM <- function(azureActiveContext, resourceGroup, location, subscriptionID,
verbose = FALSE) {
assert_that(is.azureActiveContext(azureActiveContext))
azureCheckToken(azureActiveContext)
azToken <- azureActiveContext$Token
if (missing(subscriptionID)) subscriptionID <- azureActiveContext$subscriptionID
if (missing(resourceGroup)) resourceGroup <- azureActiveContext$resourceGroup
assert_that(is_resource_group(resourceGroup))
assert_that(is_subscription_id(subscriptionID))
verbosity <- set_verbosity(verbose)
URL <- paste0("https://management.azure.com/subscriptions/", subscriptionID,
"/resourceGroups/", resourceGroup,
"/providers/Microsoft.Compute/virtualmachines?api-version=2015-05-01-preview"
)
r <- GET(URL, azureApiHeaders(azToken), verbosity)
stopWithAzureError(r)
rl <- content(r, "text", encoding = "UTF-8")
df <- fromJSON(rl)
dfn <- as.data.frame(df$value$name, stringsAsFactors = FALSE)
clust <- nrow(dfn)
if (clust < 1) {
warning("No Virtual Machines found")
return(NULL)
}
dfn[1:clust, 1] <- df$value$name
dfn[1:clust, 2] <- df$value$location
dfn[1:clust, 3] <- df$value$type
dfn[1:clust, 4] <- if (!is.null(df$value$properties$storageProfile$osDisk$osType))
df$value$properties$storageProfile$osDisk$osType
else
"-"
dfn[1:clust, 5] <- df$value$properties$provisioningState
dfn[1:clust, 6] <- df$value$properties$osProfile$adminUsername
dfn[1:clust, 7] <- df$value$id
colnames(dfn) <- c("name", "location", "type", "OS", "state", "admin", "ID")
azureActiveContext$subscriptionID <- subscriptionID
azureActiveContext$resourceGroup <- resourceGroup
return(dfn)
}
#' Start a Virtual Machine.
#'
#' @inheritParams azureListVM
#' @param vmName Virtual Machine name
#' @param mode Wait for operation to complete 'Sync' (Default)
#'
#' @family Virtual machine functions
#' @export
azureStartVM <- function(azureActiveContext, resourceGroup, vmName, mode = "Sync",
subscriptionID, verbose = FALSE) {
assert_that(is.azureActiveContext(azureActiveContext))
azureCheckToken(azureActiveContext)
azToken <- azureActiveContext$Token
if(missing(resourceGroup)) resourceGroup <- azureActiveContext$resourceGroup
if(missing(subscriptionID)) subscriptionID <- azureActiveContext$subscriptionID
if(missing(vmName)) vmName <- azureActiveContext$vmName
assert_that(is_resource_group(resourceGroup))
assert_that(is_subscription_id(subscriptionID))
assert_that(is_vm_name(vmName))
verbosity <- set_verbosity(verbose)
URL <- paste0("https://management.azure.com/subscriptions/", subscriptionID,
"/resourceGroups/", resourceGroup, "/providers/Microsoft.Compute/virtualmachines/",
vmName, "/start?api-version=2015-05-01-preview")
r <- POST(URL, azureApiHeaders(azToken), verbosity)
stopWithAzureError(r)
rl <- content(r, "text", encoding = "UTF-8")
azureActiveContext$subscriptionID <- subscriptionID
azureActiveContext$resourceGroup <- resourceGroup
azureActiveContext$vmName <- vmName
if (toupper(mode) == "SYNC") {
z <- pollStatusVM(azureActiveContext)
if (!z) return(FALSE)
}
message(paste("Start request submitted: ", Sys.time()))
return(TRUE)
}
#' Stop a Virtual Machine.
#'
#' @inheritParams setAzureContext
#' @inheritParams azureListVM
#' @inheritParams azureStartVM
#'
#' @family Virtual machine functions
#' @export
azureStopVM <- function(azureActiveContext, resourceGroup, vmName, mode = "Sync",
subscriptionID, verbose = FALSE) {
assert_that(is.azureActiveContext(azureActiveContext))
azureCheckToken(azureActiveContext)
azToken <- azureActiveContext$Token
if (missing(subscriptionID)) subscriptionID <- azureActiveContext$subscriptionID
if (missing(resourceGroup)) resourceGroup <- azureActiveContext$resourceGroup
if (missing(vmName)) vmName <- azureActiveContext$vmName
assert_that(is_resource_group(resourceGroup))
assert_that(is_subscription_id(subscriptionID))
assert_that(is_vm_name(vmName))
verbosity <- set_verbosity(verbose)
URL <- paste0("https://management.azure.com/subscriptions/", subscriptionID,
"/resourceGroups/", resourceGroup, "/providers/Microsoft.Compute/virtualmachines/",
vmName, "/deallocate?api-version=2015-05-01-preview")
r <- POST(URL, azureApiHeaders(azToken), verbosity)
stopWithAzureError(r)
rl <- content(r, "text", encoding = "UTF-8")
azureActiveContext$subscriptionID <- subscriptionID
azureActiveContext$resourceGroup <- resourceGroup
azureActiveContext$vmName <- vmName
if (toupper(mode) == "SYNC") {
z <- pollStatusVM(azureActiveContext)
if (!z) return(FALSE)
}
message("Deallocated: ", Sys.time())
return(TRUE)
}
#' Get Status of a Virtual Machine.
#'
#' @inheritParams setAzureContext
#' @inheritParams azureListVM
#' @inheritParams azureStartVM
#' @param ignore ignore
#'
#' @family Virtual machine functions
#' @export
azureVMStatus <- function(azureActiveContext, resourceGroup, vmName, subscriptionID,
ignore = "N", verbose = FALSE) {
assert_that(is.azureActiveContext(azureActiveContext))
azureCheckToken(azureActiveContext)
azToken <- azureActiveContext$Token
if (missing(subscriptionID)) subscriptionID <- azureActiveContext$subscriptionID
if (missing(resourceGroup)) resourceGroup <- azureActiveContext$resourceGroup
if (missing(vmName)) vmName <- azureActiveContext$vmName
verbosity <- set_verbosity(verbose)
assert_that(is_resource_group(resourceGroup))
assert_that(is_subscription_id(subscriptionID))
assert_that(is_vm_name(vmName))
URL <- paste0("https://management.azure.com/subscriptions/", subscriptionID,
"/resourceGroups/", resourceGroup, "/providers/Microsoft.Compute/virtualmachines/",
vmName, "/InstanceView?api-version=2015-05-01-preview")
r <- GET(URL, azureApiHeaders(azToken), verbosity)
if(status_code(r) == 404 && ignore == "Y") return("NA")
stopWithAzureError(r)
rl <- content(r, "text", encoding = "UTF-8")
df <- fromJSON(rl)
dfn <- as.data.frame(df$statuses)
clust <- nrow(dfn)
if (clust < 1) {
if (ignore == "Y") {
return("NA")
} else {
stop("No Virtual Machines found")
}
}
return(paste(df$statuses$displayStatus, collapse = ", "))
}
#' Delete a Virtual Machine.
#'
#' @inheritParams azureListVM
#' @inheritParams azureStartVM
#' @family Virtual machine functions
#' @export
azureDeleteVM <- function(azureActiveContext, resourceGroup, vmName, subscriptionID,
mode = "Sync", verbose = FALSE) {
assert_that(is.azureActiveContext(azureActiveContext))
azureCheckToken(azureActiveContext)
azToken <- azureActiveContext$Token
if (missing(subscriptionID)) subscriptionID <- azureActiveContext$subscriptionID
if (missing(resourceGroup)) resourceGroup <- azureActiveContext$resourceGroup
if (missing(vmName)) vmName <- azureActiveContext$vmName
verbosity <- set_verbosity(verbose)
assert_that(is_resource_group(resourceGroup))
assert_that(is_subscription_id(subscriptionID))
assert_that(is_vm_name(vmName))
URL <- paste0("https://management.azure.com/subscriptions/", subscriptionID,
"/resourceGroups/", resourceGroup, "/providers/Microsoft.Compute/virtualmachines/",
vmName, "?api-version=2015-05-01-preview")
r <- DELETE(URL, azureApiHeaders(azToken), verbosity)
stopWithAzureError(r)
azureActiveContext$subscriptionID <- subscriptionID
azureActiveContext$resourceGroup <- resourceGroup
azureActiveContext$vmName <- vmName
if (toupper(mode) == "SYNC") {
z <- pollStatusVM(azureActiveContext)
if (!z) return(FALSE)
}
message(paste("Finished: ", Sys.time()))
return(TRUE)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.