in src/run.ts [14:126]
export async function run() {
const originalAzUserAgent = process.env[AZ_USER_AGENT_ENV] || ''
const originalAzUserAgentPs = process.env[AZ_USER_AGENT_ENV_PS] || ''
// use try finally to always unset temp user agent
try {
// set az user agent
core.exportVariable(AZ_USER_AGENT_ENV, getUserAgent(originalAzUserAgent))
core.exportVariable(
AZ_USER_AGENT_ENV_PS,
getUserAgent(originalAzUserAgentPs)
)
// get inputs and validate resource type input
const resourceGroupName = core.getInput('resource-group', {
required: true
})
const clusterName = core.getInput('cluster-name', {required: true})
const resourceTypeFleet = 'microsoft.containerservice/fleets'
const resourceTypeManagedCluster =
'microsoft.containerservice/managedclusters'
type ResourceType =
| typeof resourceTypeFleet
| typeof resourceTypeManagedCluster
const resourceInput = (
core.getInput('resource-type') ||
'Microsoft.ContainerService/managedClusters'
).toLowerCase()
if (
resourceInput !== resourceTypeFleet &&
resourceInput !== resourceTypeManagedCluster
) {
throw Error(
'Resource type not recognized, either Microsoft.ContainerService/managedClusters or Microsoft.ContainerService/fleets is valid'
)
}
const resourceType: ResourceType = resourceInput
const subscription = core.getInput('subscription') || ''
const adminInput = core.getInput('admin') || ''
const admin = adminInput.toLowerCase() === 'true'
const useKubeLoginInput = core.getInput('use-kubelogin') || ''
const useKubeLogin = useKubeLoginInput.toLowerCase() === 'true' && !admin
const publicFqdnInput = core.getInput('public-fqdn') || ''
const publicFqdn = publicFqdnInput.toLowerCase() === 'true'
// validate user is not using admin or publicFqdn flags with fleet resource
if (resourceType === 'microsoft.containerservice/fleets' && admin) {
throw Error(
'admin must not be true when resource type is Microsoft.ContainerService/fleets'
)
}
if (resourceType === 'microsoft.containerservice/fleets' && publicFqdn) {
throw Error(
'public-fqdn must not be true when resource type is Microsoft.ContainerService/fleets'
)
}
// check az tools
const azPath = await io.which(AZ_TOOL_NAME, false)
if (!azPath)
throw Error(
'Az cli tools not installed. You must install them before running this action.'
)
// get kubeconfig
const runnerTempDirectory = process.env['RUNNER_TEMP'] // use process.env until the core libs are updated
const kubeconfigPath = path.join(
runnerTempDirectory,
`kubeconfig_${Date.now()}`
)
core.debug(`Writing kubeconfig to ${kubeconfigPath}`)
const cmd = [
resourceType == 'microsoft.containerservice/fleets' ? 'fleet' : 'aks',
'get-credentials',
'--resource-group',
resourceGroupName,
'--name',
clusterName,
'-f',
kubeconfigPath
]
if (subscription) cmd.push('--subscription', subscription)
if (admin) cmd.push('--admin')
if (publicFqdn) cmd.push('--public-fqdn')
const exitCode = await exec.exec(AZ_TOOL_NAME, cmd)
if (exitCode !== 0)
throw Error('az cli exited with error code ' + exitCode)
fs.chmodSync(kubeconfigPath, '600')
// export variable
core.exportVariable('KUBECONFIG', kubeconfigPath)
core.debug('KUBECONFIG environment variable set')
core.exportVariable('KUBE_CONFIG_PATH', kubeconfigPath)
if (useKubeLogin) {
const kubeloginCmd = ['convert-kubeconfig', '-l', 'azurecli']
const kubeloginExitCode = await exec.exec(
KUBELOGIN_TOOL_NAME,
kubeloginCmd
)
if (kubeloginExitCode !== 0)
throw Error('kubelogin exited with error code ' + exitCode)
}
} catch (e) {
throw e
} finally {
core.exportVariable(AZ_USER_AGENT_ENV, originalAzUserAgent)
core.exportVariable(AZ_USER_AGENT_ENV_PS, originalAzUserAgentPs)
}
}