blob: 826c3b192858facfb9214e02bb9f324771b7f2ab [file] [log] [blame]
/*
* Copyright 2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
ext {
// Target registry to be used to publish docker images needed for deployment
targetReg = project.hasProperty('targetReg') ? project.getProperty('targetReg') : 'localhost:5000'
// The tag used to tag the docker images push to the target registry
targetTag = project.hasProperty('targetTag') ? project.getProperty('targetTag') : 'candidate'
}
task buildBootstrapImage(type: Exec) {
commandLine '/usr/bin/docker', 'build', '-t', 'cord-maas-bootstrap', './bootstrap'
}
task tagBootstrapImage(type: Exec) {
dependsOn buildBootstrapImage
commandLine '/usr/bin/docker', 'tag', 'cord-maas-bootstrap', "$targetReg/cord-maas-bootstrap:$targetTag"
}
task publishBootstrapImage(type: Exec) {
dependsOn tagBootstrapImage
commandLine '/usr/bin/docker', 'push', "$targetReg/cord-maas-bootstrap:$targetTag"
}
task buildAutomationImage(type: Exec) {
commandLine '/usr/bin/docker', 'build', '-t', "cord-maas-automation", "./automation"
}
task tagAutomationImage(type: Exec) {
dependsOn buildAutomationImage
commandLine '/usr/bin/docker', 'tag', 'cord-maas-automation', "$targetReg/cord-maas-automation:$targetTag"
}
task publishAutomationImage(type: Exec) {
dependsOn tagAutomationImage
commandLine '/usr/bin/docker', 'push', "$targetReg/cord-maas-automation:$targetTag"
}
task buildHarvesterImage(type: Exec) {
commandLine '/usr/bin/docker', 'build', '-t', "cord-maas-dhcp-harvester", "./harvester"
}
task tagHarvesterImage(type: Exec) {
dependsOn buildHarvesterImage
commandLine '/usr/bin/docker', 'tag', 'cord-maas-dhcp-harvester', "$targetReg/cord-maas-dhcp-harvester:$targetTag"
}
task publishHarvesterImage(type: Exec) {
dependsOn tagHarvesterImage
commandLine '/usr/bin/docker', 'push', "$targetReg/cord-maas-dhcp-harvester:$targetTag"
}
// ~~~~~~~~~~~~~~~~~~~ Global tasks ~~~~~~~~~~~~~~~~~~~~~~~
// To be used to fetch upstream binaries, clone repos, etc.
task fetch(type: Exec) {
// this is where we fetch upstream artifacts that we do not need internet for the build phase"
// Placeholdr example:
commandLine "/usr/bin/docker", "pull", "golang:alpine"
commandLine "/usr/bin/docker", "pull", "python:2.7-alpine"
}
// To be used to generate all needed binaries that need to be present on the target
// as docker images in the local docker runner.
task buildImages {
dependsOn buildBootstrapImage
dependsOn buildHarvesterImage
dependsOn buildAutomationImage
}
task tagImages {
dependsOn tagBootstrapImage
dependsOn tagHarvesterImage
dependsOn tagAutomationImage
}
task publish {
dependsOn publishBootstrapImage
dependsOn publishHarvesterImage
dependsOn publishAutomationImage
}
// ~~~~~~~~~~~~~~~~~~~ Deployment / Test Tasks ~~~~~~~~~~~~~~~~~~~~~~~
// This task will invoke the ansible configuration on the vagrant head node. The ansible deployment is
// executed remotely to the head node as this is a more realistic scenario for a production deployment.
// The assumption is that this task is executed from the maasdev virtual machine as it access the head
// node virtual box over a private network.
//
// TODO: Currently the deployment of the head node does not use the locally built docker containers, it
// should be modified to do so. This likely means that we need to configure docker on the head node
// to access the docker registry on the maasdev virtual box.
task deployMaas(type: Exec) {
commandLine '/usr/bin/ansible-playbook', '-i', '10.100.198.202,', '--skip-tags=switch_support,interface_config', 'dev-head-node.yml', '--extra-vars=external_iface=eth0 fabric_ip=10.1.1.1/24'
}