fun addContainerVolumes()

in plugin-azure-server/src/main/kotlin/jetbrains/buildServer/clouds/azure/arm/utils/ArmTemplateBuilder.kt [301:354]


    fun addContainerVolumes(resourceName: String, name: String): ArmTemplateBuilder {
        val properties = getPropertiesOfResource(resourceName)
        val containers = containersFromProperties(properties)

        (containers.firstOrNull() as? ObjectNode)?.let {
            val props = (it["properties"] as? ObjectNode) ?: it.putObject("properties")
            val volumeMounts = (props["volumeMounts"] as? ArrayNode) ?: props.putArray("volumeMounts")
            volumeMounts.addPOJO(object {
                val name = name
                val mountPath = "/var/lib/waagent/"
                val readOnly = true
            })
            volumeMounts.addPOJO(object {
                val name = "$name-plugins"
                val mountPath = "/opt/buildagent/plugins/"
            })
            volumeMounts.addPOJO(object {
                val name = "$name-logs"
                val mountPath = "/opt/buildagent/logs/"
            })
            volumeMounts.addPOJO(object {
                val name = "$name-system"
                val mountPath = "/opt/buildagent/system/.teamcity-agent/"
            })
            volumeMounts.addPOJO(object {
                val name = "$name-tools"
                val mountPath = "/opt/buildagent/tools/"
            })
        }

        val volumes = (properties["volumes"] as? ArrayNode) ?: properties.putArray("volumes")
        volumes.addPOJO(object {
            val name = name
            val azureFile = object {
                val shareName = name
                val storageAccountName = "[parameters('storageAccountName')]"
                val storageAccountKey = "[parameters('storageAccountKey')]"
            }
        })

        for (volume in AzureConstants.CONTAINER_VOLUMES) {
            volumes.addPOJO(object {
                val name = "$name-$volume"
                val azureFile = object {
                    val shareName = "$name-$volume"
                    val storageAccountName = "[parameters('storageAccountName')]"
                    val storageAccountKey = "[parameters('storageAccountKey')]"
                }
            })
        }

        return this.addParameter("storageAccountName", "String", "")
                .addParameter("storageAccountKey", "SecureString", "")
    }