ignore = .*/**
indent_size = 2
-[YAML]
-bears = YAMLLintBear
-files = jjb/**/*.yaml,openstack-hot/**/*.yaml
-document_start = True
-yamllint_config = yamllint.conf
-
[ShellCheck]
bears = ShellCheckBear,SpaceConsistencyBear
-files = jenkins-scripts/**/*.sh,
- jjb/**/*.sh,
- scripts/**/*.sh
-ignore = jenkins-scripts/*-local-env.sh,
- jjb/global-jjb/shell/*.sh,
- jjb/integration/include-raw-integration-compare-distributions.sh,
- jjb/integration/include-raw-integration-configure-clustering.sh,
+files = **/*.sh
+ignore = .git/**,
+ .tox/**,
+ jenkins-scripts/*-local-env.sh,
jjb/integration/include-raw-integration-deploy-controller-offline.sh,
jjb/integration/include-raw-integration-deploy-controller-run-test.sh,
jjb/integration/include-raw-integration-deploy-controller-verify.sh,
shell = bash
indent_size = 4
use_spaces = yeah
+
+[YAML]
+bears = YAMLLintBear
+files = jjb/**/*.yaml,openstack-hot/**/*.yaml
+document_start = True
+yamllint_config = yamllint.conf
* Ubuntu 14.04 - mininet - 20170210-0439
* Ubuntu 14.04 - mininet - 20170606-0534
* Ubuntu 14.04 - mininet - 20170609-0220
+* Ubuntu 14.04 - mininet - 20170611-0950
* Ubuntu 14.04 - mininet-ovs-2.3 - 20170117-0004
* Ubuntu 14.04 - mininet-ovs-2.5 - 20170117-0004
* Ubuntu 14.04 - mininet-ovs-23 - 20170130-0415
+++ /dev/null
-/*****************
-* Removes offline slave nodes
-*
-* NOTE: Some slaves can't be removed as the backing instance already is
-* missing but the UI collection didn't get the update. See the
-* slay_computer.groovy for a more drastic destruction
-*
-* NOTE 2: If you have any slaves you want to live through this and you
-* have them currently marked offline you _must_ bring them back online.
-*****************/
-
-import hudson.model.*
-
-def numberOfflineNodes = 0
-def numberNodes = 0
-
-slaveNodes = hudson.model.Hudson.instance
-
-for (slave in slaveNodes.nodes) {
- def computer = slave.computer
- numberNodes ++
- println ""
- println "Checking computer ${computer.name}:"
- if (computer.offline) {
- numberOfflineNodes ++
- println '\tcomputer.isOffline: ' + slave.getComputer().isOffline()
- println '\tcomputer.offline: ' + computer.offline
- println '\tRemoving slave'
- slaveNodes.removeNode(slave)
- } else {
- println '\tcomputer.isOffline: ' + slave.getComputer().isOffline()
- println '\tcomputer.offline: ' + computer.offline
- }
-}
-
-println "Number of Offline Nodes: " + numberOfflineNodes
-println "Number of Nodes: " + numberNodes
-
-// vim: sw=4 sts=4 ts=4 et ai :
+++ /dev/null
-/*****************
-* Completely slays misbehaving slave nodes
-*
-* NOTE: Use del_computer.groovy first! If nodes are still hanging around
-* _then_ consider using this script. This one is mucking around in a
-* location we should not normally be touching, however if a slave
-* refuses to go away (tosses an exception) this _will_ get rid of it.
-*
-* NOTE 2: If you have any slaves you want to live through this and you
-* have them currently marked offline you _must_ bring them back online.
-*****************/
-
-import jenkins.*
-import jenkins.model.*
-import hudson.*
-import hudson.model.*
-
-for (aComputer in Jenkins.instance.computers) {
- try {
- println "displayName: " + aComputer.properties.displayName
- println "offline: " + aComputer.properties.offline
- println "temporarilyOffline: " + aComputer.properties.temporarilyOffline
- if (aComputer.properties.offline) {
- println "Bad node, removing"
- Jenkins.instance.removeComputer(aComputer)
- }
- println ""
- }
- catch (NullPointerException nullPointer) {
- println "NullPointerException caught"
- println ""
- }
-}
-
-// vim: sw=4 sts=4 ts=4 et ai :
tools_system_count: '1'
tools_system_flavor: '4 GB General Purpose v1'
- tools_system_image: 'CentOS 7 - docker - 20170120-1434'
+ tools_system_image: 'CentOS 7 - docker - 20170609-0220'
# Robot custom options
robot-options: ''
scope: 'only'
# Features to install
- install-features: odl-restconf,
- odl-netconf-all,
- http
+ install-features: odl-ovsdb-southbound-impl-rest
# Robot custom options
robot-options: ''
- # Don't spin up mininet vms as aaa-csit-authn jobs don't need them
- tools_system_count: 0
+ # mininet image
+ tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
branch: 'master'
jdk: 'openjdk8'
integration-test: nitrogen
- karaf-version: karaf3
- carbon:
next-release-tag: Carbon
branch: 'stable/carbon'
jdk: 'openjdk8'
integration-test: carbon
karaf-version: karaf3
- extra-mvn-opts: -Dskip.karaf.featureTest=true
+ extra-mvn-opts: -Dskip.karaf4.featureTest=true
- boron:
# Only run once a week since Boron is in maintenance mode
cron: 'H H * * 0'
- next-release-tag: Boron-SR4
+ next-release-tag: Boron-SR5
branch: 'stable/boron'
jdk: 'openjdk8'
integration-test: boron
publishers:
- opendaylight-infra-notify-status
- - archive:
- # Need to archive dependencies.log in Jenkins to provide a simple
- # way for downstream jobs to pull the latest version of this file
- # in their builds.
- artifacts: 'dependencies.log'
- trigger-parameterized-builds:
- - project: 'autorelease-generate-release-notes-{stream}'
- condition: UNSTABLE_OR_BETTER
- property-file: variables.jenkins-trigger
- fail-on-missing: true
- project: 'integration-distribution-test-{integration-test}'
condition: UNSTABLE_OR_BETTER
property-file: variables.jenkins-trigger
- lf-infra-parameters:
project: releng/autorelease
branch: '{branch}'
+ stream: '{stream}'
refspec: 'refs/heads/{branch}'
- string:
name: RELEASE_TAG
- version-bump.sh
publishers:
+ - trigger-parameterized-builds:
+ - project: 'autorelease-generate-release-notes-{stream}'
+ condition: UNSTABLE_OR_BETTER
+ trigger-with-no-params: true
- lf-infra-publish
- job-template:
- lf-infra-parameters:
project: '{project}'
branch: '{branch}'
+ stream: '{stream}'
scm:
- lf-infra-gerrit-scm:
# Features to install
install-features: >
odl-restconf,
+ odl-jolokia,
odl-bgpcep-data-change-counter,
odl-bgpcep-bgp,
odl-netconf-topology
- mvn33:
mvn-version: 'mvn33'
mvn-settings: 'bgpcep-settings'
- mvn-goals: 'clean -DrepoBuild install javadoc:aggregate'
+ mvn-goals: 'clean install'
mvn-opts: '-Xmx1024m -XX:MaxPermSize=256m'
dependencies: >
odlparent-merge-{stream},
name: coe-nitrogen
jobs:
- '{project-name}-clm-{stream}'
+ - '{project-name}-distribution-check-{stream}'
- '{project-name}-integration-{stream}'
- '{project-name}-merge-{stream}'
- '{project-name}-verify-{stream}-{maven}-{jdks}'
# Mininet configuration
tools_system_count: 2
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Features to install
install-features: 'odl-genius-rest'
-Subproject commit 129735b3b42874ae1de0d0708e28cde16b615e9e
+Subproject commit 0a7789167effec0b07cc32794d44ff3222e90a1a
rm $BUNDLE
echo "Extracting the distribution just created by this job..."
-NEW_DISTRO="$(find $WORKSPACE -name ${KARAF_ARTIFACT}*.zip)"
+NEW_DISTRO="$(find $WORKSPACE -name "${KARAF_ARTIFACT}*.zip")"
NEW_DISTRO_BASENAME="$(basename "$NEW_DISTRO")"
cp $NEW_DISTRO /tmp/
-cd /tmp/
+cd /tmp/ || exit
# get the name of the folder which will be extracted to
EXTRACTED_FOLDER=$(unzip $NEW_DISTRO_BASENAME | grep 'creating:' | grep -v '/.' | cut -d' ' -f5-)
mv $EXTRACTED_FOLDER distro_new
git clone https://git.opendaylight.org/gerrit/p/integration/test.git
-cd test/tools/distchanges
+cd test/tools/distchanges || exit
mkdir -p $WORKSPACE/archives
# Full output of compare tool will be in temp file /tmp/dist_diff.txt
# Activate robotframework virtualenv
# ${ROBOT_VENV} comes from the include-raw-integration-install-robotframework.sh
# script.
+# shellcheck source=${ROBOT_VENV}/bin/activate disable=SC1091
source ${ROBOT_VENV}/bin/activate
echo "#################################################"
delim=' '
final=$1; shift
- for str in $* ; do
+ for str in "$@" ; do
final=${final}${delim}${str}
done
nodes[$i]=${!CONTROLLERIP}
done
-nodes_list=$(join ${nodes[@]})
+nodes_list=$(join "${nodes[@]}")
echo ${nodes_list}
scp ${!OS_CTRL_IP}:/var/log/openvswitch/ovs-vswitchd.log ${OS_CTRL_FOLDER}/ovs-vswitchd.log
scp ${!OS_CTRL_IP}:/etc/neutron/neutron.conf ${OS_CTRL_FOLDER}/neutron.conf
scp ${!OS_CTRL_IP}:/etc/nova/nova.conf ${OS_CTRL_FOLDER}/nova.conf
+ scp ${!OS_CTRL_IP}:/etc/kuryr/kuryr.conf ${OS_CTRL_FOLDER}/kuryr.conf
rsync -avhe ssh ${!OS_CTRL_IP}:/opt/stack/logs/* ${OS_CTRL_FOLDER} # rsync to prevent copying of symbolic links
scp extra_debug.sh ${!OS_CTRL_IP}:/tmp
${SSH} ${!OS_CTRL_IP} "bash /tmp/extra_debug.sh > /tmp/extra_debug.log"
SUITES=`egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' testplan.txt | tr '\012' ' '`
+#Environment Variables Needed to execute Openstack Client for NEtvirt Jobs
+cat > /tmp/os_netvirt_client_rc << EOF
+export OS_USERNAME=admin
+export OS_PASSWORD=admin
+export OS_PROJECT_NAME=admin
+export OS_USER_DOMAIN_NAME=default
+export OS_PROJECT_DOMAIN_NAME=default
+export OS_AUTH_URL="http://${!CONTROLIP}:35357/v3"
+export OS_IDENTITY_API_VERSION=3
+export OS_IMAGE_API_VERSION=2
+export OS_TENANT_NAME=admin
+unset OS_CLOUD
+EOF
+
+source /tmp/os_netvirt_client_rc
+
#FIXME currently support only 1 site
echo "Starting Robot test suites ${SUITES} ..."
# please add pybot -v arguments on a single line and alphabetized
pip install --upgrade jsonpath-rw
# Modules for longevity framework robot library
-pip install --upgrade elasticsearch elasticsearch-dsl
+pip install --upgrade elasticsearch==1.7.0 elasticsearch-dsl==0.0.11
# Module for pyangbind used by lispflowmapping project
pip install --upgrade pyangbind
# Module for backup-restore support library
pip install --upgrade jsonpatch
+#Module OpenstackClient is needed for NEtvirt CSIT jobs
+pip install python-openstackclient
+pip install python-neutronclient
+
# Print installed versions.
pip freeze
BUNDLEFOLDER="${KARAF_ARTIFACT}-${BUNDLEVERSION}"
BUNDLE="${KARAF_ARTIFACT}-${TIMESTAMP}.zip"
ACTUAL_BUNDLE_URL="${NEXUSPATH}/${BUNDLEVERSION}/${BUNDLE}"
-elif [[ "${BUNDLE_URL}" == *"jenkins"* ]]; then
- ACTUAL_BUNDLE_URL="${BUNDLE_URL}"
- BUNDLE="${BUNDLE_URL##*/}"
- BUNDLEFOLDER="${BUNDLE//.zip}"
- BUNDLEVERSION="${BUNDLEFOLDER//$KARAF_ARTIFACT-}"
else
ACTUAL_BUNDLE_URL="${BUNDLE_URL}"
BUNDLE="${BUNDLE_URL##*/}"
+ ARTIFACT="$(basename "$(dirname "$(dirname "${BUNDLE_URL}")")")"
BUNDLEVERSION="$(basename "$(dirname "${BUNDLE_URL}")")"
- BUNDLEFOLDER="${KARAF_ARTIFACT}-${BUNDLEVERSION}"
+ BUNDLEFOLDER="${ARTIFACT}-${BUNDLEVERSION}"
fi
echo "Distribution bundle URL is ${ACTUAL_BUNDLE_URL}"
csit-list: '{csit-list-nitrogen}'
csit-sanity-list: '{csit-sanity-list-nitrogen}'
csit-weekly-list: '{csit-weekly-list-nitrogen}'
- schedule-weekly: 'H 12 * * 0'
+ schedule-weekly: 'H 23 * * 6'
csit-high-frequency-list: ''
schedule-high-frequency: ''
csit-list: '{csit-list-carbon}'
csit-sanity-list: '{csit-sanity-list-carbon}'
csit-weekly-list: '{csit-weekly-list-carbon}'
- schedule-weekly: 'H 12 * * 0'
+ schedule-weekly: 'H 23 * * 6'
csit-high-frequency-list: '{csit-high-frequency-list-carbon}'
schedule-high-frequency: 'H H/4 * * *'
csit-list: '{csit-list-boron}'
csit-sanity-list: '{csit-sanity-list-boron}'
csit-weekly-list: '{csit-weekly-list-boron}'
- schedule-weekly: 'H 12 * * 0'
+ schedule-weekly: 'H 23 * * 6'
csit-high-frequency-list: ''
schedule-high-frequency: ''
# tools system image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Template: integration-csit-verify-1node-library
# Goal: Verify changes in csit folder not covered by projects suite verify jobs (e.g. libraries or variables)
- all:
scope: 'all'
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Features to install
install-features: 'odl-lacp-ui'
- upstream-learn:
schedule: ''
sg-mode: 'learn'
+ - gate-stateful:
+ schedule: ''
+ sg-mode: 'stateful'
stream:
- nitrogen:
- newton:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
- newton-nodl-v2:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
odl-ml2-driver-version: 'v2'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
tools_system_count: 2
---
+
- project:
- name: netvirt-csit-openstack-integration
+ name: netvirt-csit-openstack-integration-nitrogen
jobs:
- '{project}-csit-{topology}-openstack-{openstack}-{functionality}-{stream}'
schedule: ''
sg-mode: 'transparent'
- upstream-stateful:
- schedule: ''
+ schedule: '@daily'
sg-mode: 'stateful'
+ # yamllint disable-line rule:line-length
+ bundle-url: 'https://jenkins.opendaylight.org/releng/view/netvirt/job/netvirt-merge-nitrogen/lastSuccessfulBuild/org.opendaylight.netvirt$vpnservice-karaf/artifact/org.opendaylight.netvirt/vpnservice-karaf/0.5.0-SNAPSHOT/vpnservice-karaf-0.5.0-SNAPSHOT.zip'
- upstream-stateful-snat-conntrack:
schedule: ''
sg-mode: 'stateful'
- nitrogen:
branch: 'master'
jre: 'openjdk8'
+
+ openstack:
+ - newton:
+ openstack-branch: 'stable/newton'
+ odl-ml2-branch: 'stable/newton'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
+ - newton-nodl-v2:
+ openstack-branch: 'stable/newton'
+ odl-ml2-branch: 'stable/newton'
+ odl-ml2-driver-version: 'v2'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
+ - ocata:
+ openstack-branch: 'stable/ocata'
+ odl-ml2-branch: 'stable/ocata'
+ odl-ml2-driver-version: 'v2'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
+
+ security-group-mode: '{sg-mode}'
+
+- project:
+ name: netvirt-csit-openstack-integration
+ jobs:
+ - '{project}-csit-{topology}-openstack-{openstack}-{functionality}-{stream}'
+
+ project: 'netvirt'
+
+ topology:
+ - 1node:
+ openstack_system_count: 3
+ odl_system_count: 1
+ enable-haproxy: 'no'
+ install-features: 'odl-netvirt-openstack'
+ - 3node:
+ openstack_system_count: 4
+ odl_system_count: 3
+ enable-haproxy: 'yes'
+ install-features: 'odl-jolokia,odl-netvirt-openstack'
+
+ testplan: '{project}-{topology}-openstack.txt'
+
+ functionality:
+ - upstream-transparent:
+ schedule: ''
+ sg-mode: 'transparent'
+ - upstream-stateful:
+ schedule: ''
+ sg-mode: 'stateful'
+ - upstream-stateful-snat-conntrack:
+ schedule: ''
+ sg-mode: 'stateful'
+ odl-snat-mode: 'conntrack'
+ - upstream-learn:
+ schedule: ''
+ sg-mode: 'learn'
+ - gate-learn:
+ schedule: ''
+ sg-mode: 'learn'
+ - gate-transparent:
+ schedule: ''
+ sg-mode: 'transparent'
+ - gate-stateful:
+ schedule: ''
+ sg-mode: 'stateful'
+ - gate-minimal-transparent:
+ schedule: ''
+ sg-mode: 'transparent'
+ testplan: '{project}-{topology}-minimal-openstack.txt'
+ - gate-tempest-transparent:
+ schedule: ''
+ sg-mode: 'transparent'
+ testplan: '{project}-{topology}-tempest-openstack.txt'
+
+ stream:
- carbon:
branch: 'stable/carbon'
jre: 'openjdk8'
- newton:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
- newton-nodl-v2:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
odl-ml2-driver-version: 'v2'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
- ocata:
openstack-branch: 'stable/ocata'
odl-ml2-branch: 'stable/ocata'
odl-ml2-driver-version: 'v2'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
security-group-mode: '{sg-mode}'
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
odl-ml2-driver-version: 'v2'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
security-group-mode: 'stateful'
- newton:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
- newton-nodl-v2:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
odl-ml2-driver-version: 'v2'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
- ocata:
openstack-branch: 'stable/ocata'
odl-ml2-branch: 'stable/ocata'
odl-ml2-driver-version: 'v2'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
public-bridge: 'br-ex'
karaf-version: karaf3
feature:
- - legacy:
- csit-list: >
- netvirt-legacy-csit-1node-openstack-newton-nodl-v2-gate-{stream},
- netvirt-legacy-csit-1node-openstack-basic-only-{stream}
- current:
csit-list: >
netvirt-csit-1node-openstack-newton-nodl-v2-gate-stateful-{stream}
- snat-conntrack:
csit-list: >
netvirt-csit-1node-openstack-newton-upstream-stateful-snat-conntrack-{stream}
+ - hwvtep:
+ csit-list: >
+ netvirt-csit-hwvtep-1node-openstack-newton-gate-stateful-{stream}
+
+- project:
+ name: netvirt-legacy-patch-test
+ jobs:
+ - '{project}-patch-test-{feature}-{stream}'
+
+ # The project name
+ project: 'netvirt-legacy'
+
+ # Project branches
+ stream:
+ - boron:
+ branch: 'stable/boron'
+ jdk: 'openjdk8'
+ karaf-version: karaf3
+
+ feature:
+ - legacy:
+ csit-list: >
+ netvirt-legacy-csit-1node-openstack-newton-nodl-v2-gate-{stream},
+ netvirt-legacy-csit-1node-openstack-basic-only-{stream}
+++ /dev/null
----
-- project:
- name: nic-csit-vtnrenderer
- jobs:
- - '{project}-csit-1node-{functionality}-{install}-{stream}'
- - '{project}-csit-verify-1node-{functionality}'
-
- # The project name
- project: 'nic'
-
- # The functionality under test
- functionality: 'vtnrenderer'
-
- # Project branches
- stream:
- - nitrogen:
- branch: 'master'
- jre: 'openjdk8'
- - carbon:
- branch: 'stable/carbon'
- jre: 'openjdk8'
- karaf-version: karaf3
- - boron:
- branch: 'stable/boron'
- jre: 'openjdk8'
- karaf-version: karaf3
-
- install:
- - only:
- scope: 'only'
- - all:
- scope: 'all'
-
- # Features to install
- install-features: 'odl-nic-console,odl-nic-renderer-vtn'
-
- # Robot custom options
- robot-options: ''
---
- project:
- name: odlparent-nitrogen
+ name: odlparent-master
jobs:
- '{project-name}-clm-{stream}'
- '{project-name}-distribution-check-{stream}'
- - '{project-name}-integration-{stream}'
- '{project-name}-merge-{stream}'
- '{project-name}-verify-{stream}-{maven}-{jdks}'
- '{project-name}-verify-tox-{stream}'
- '{project-name}-maven-jobs'
- stream: nitrogen
- project: 'odlparent'
- project-name: 'odlparent'
- branch: 'master'
+ project: odlparent
+ project-name: odlparent
+ stream: master
+ branch: master
+ distribution_branch: master
+
jdk: openjdk8
jdks:
- openjdk8
maven:
- mvn33:
mvn-version: mvn33
- mvn-settings: 'odlparent-settings'
- mvn-goals: 'clean install'
+ mvn-settings: odlparent-settings
+ mvn-goals: clean install
mvn-opts: '-Xmx1024m -XX:MaxPermSize=256m'
mvn-version: mvn33
+
+ dependencies: ''
+ email-upstream: '[odlparent]'
+ archive-artifacts: ''
+
+ # Used by the release job
+ settings-file: odlparent-settings
+ staging-profile-id: 880d5ac25eaa
+
+- project:
+ name: odlparent-2.0.x
+ jobs:
+ - '{project-name}-clm-{stream}'
+ - '{project-name}-distribution-check-{stream}'
+ - '{project-name}-merge-{stream}'
+ - '{project-name}-verify-{stream}-{maven}-{jdks}'
+ - '{project-name}-verify-tox-{stream}'
+ - '{project-name}-maven-jobs'
+
+ project: odlparent
+ project-name: odlparent
+ stream: 2.0.x
+ branch: 2.0.x
+ distribution_branch: master
+
+ jdk: openjdk8
+ jdks:
+ - openjdk8
+ maven:
+ - mvn33:
+ mvn-version: mvn33
+ mvn-settings: odlparent-settings
+ mvn-goals: clean install
+ mvn-opts: '-Xmx1024m -XX:MaxPermSize=256m'
+ mvn-version: mvn33
+
dependencies: ''
email-upstream: '[odlparent]'
archive-artifacts: ''
--- /dev/null
+#!/bin/bash
+# @License EPL-1.0 <http://spdx.org/licenses/EPL-1.0>
+##############################################################################
+# Copyright (c) 2017 The Linux Foundation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+##############################################################################
+
+# Ensure we fail the job if any steps fail.
+set -eu -o pipefail
+
+MAVEN_GROUP_ID=$(xmlstarlet sel \
+ -N "x=http://maven.apache.org/POM/4.0.0" \
+ -t \
+ --if "/x:project/x:groupId" \
+ -v "/x:project/x:groupId" \
+ --elif "/x:project/x:parent/x:groupId" \
+ -v "/x:project/x:parent/x:groupId" \
+ --else -o "" \
+ pom.xml 2>/dev/null)
+
+cd "$WORKSPACE/target"
+mv staged-site "$STREAM"
+zip -r maven-site.zip "$STREAM"
+lftools deploy nexus-zip "$NEXUS_URL" site "$MAVEN_GROUP_ID" maven-site.zip
source "/tmp/v/git-review/bin/activate"
pip install --upgrade pip
pip install --upgrade git-review
-pip freeze
+pip install --upgrade pipdeptree
+pipdeptree
# shellcheck disable=SC1083
CHANGE_ID=$(ssh -p 29418 "jenkins-$SILO@git.opendaylight.org" gerrit query \
scope: 'only'
# Features to install
- install-features: 'odl-openflowplugin-flow-services-ui,odl-openflowplugin-app-bulk-o-matic'
+ install-features: 'odl-openflowplugin-flow-services-rest,odl-openflowplugin-app-bulk-o-matic'
# Robot custom options
robot-options: '-v ODL_OF_PLUGIN:lithium'
# Job images
odl_system_flavor: '8 GB General Purpose v1'
- tools_system_image: 'Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300'
+ tools_system_image: 'Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221'
# Features to install
install-features: >
- odl-openflowplugin-flow-services-ui,
+ odl-openflowplugin-flow-services-rest,
odl-openflowplugin-app-bulk-o-matic,
odl-jolokia,
decanter-collector-jmx,
# Job images
odl_system_flavor: 8 GB General Purpose v1
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Features to install
install-features: >
- odl-openflowplugin-flow-services-ui,
+ odl-openflowplugin-flow-services-rest,
odl-openflowplugin-app-bulk-o-matic,
odl-jolokia,
decanter-collector-jmx,
scope: 'only'
# Features to install
- install-features: 'odl-openflowplugin-flow-services-ui,odl-openflowplugin-drop-test'
+ install-features: 'odl-openflowplugin-flow-services-rest,odl-openflowplugin-drop-test'
# Robot custom options
robot-options: '-v duration_in_secs:180 -v throughput_threshold:20000 -v latency_threshold:5000'
scope: 'only'
# Features to install
- install-features: 'odl-openflowplugin-flow-services-ui,odl-openflowplugin-app-table-miss-enforcer'
+ install-features: 'odl-openflowplugin-flow-services-rest,odl-openflowplugin-app-table-miss-enforcer'
# Robot custom options
robot-options: '-v ODL_OF_PLUGIN:lithium'
# mininet image
- tools_system_image: 'Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300'
+ tools_system_image: 'Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221'
robot-options: '-v flow_update_time:30s'
# mininet image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
scope: 'all'
# Features to install
- install-features: 'odl-openflowplugin-flow-services-ui,odl-openflowplugin-app-table-miss-enforcer'
+ install-features: 'odl-openflowplugin-flow-services-rest,odl-openflowplugin-app-table-miss-enforcer'
# Robot custom options
robot-options: ''
# mininet image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Features to install
install-features: >
- odl-openflowplugin-flow-services-ui,
+ odl-openflowplugin-flow-services-rest,
odl-openflowplugin-app-table-miss-enforcer,
decanter-collector-jmx,
decanter-appender-elasticsearch
robot-options: ''
# mininet image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Plot Info
01-plot-title: 'Maximum Links Full Mesh Topology'
# Features to install
install-features: >
- odl-openflowplugin-flow-services-ui,
+ odl-openflowplugin-flow-services-rest,
odl-openflowplugin-app-table-miss-enforcer,
decanter-collector-jmx,
decanter-appender-elasticsearch
robot-options: '-v TEST_LENGTH:23h'
# mininet image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Trigger jobs (on saturday)
schedule: 'H H * * 6'
# Job images
odl_system_flavor: 8 GB General Purpose v1
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Features to install
install-features: >
- odl-openflowplugin-flow-services-ui,
+ odl-openflowplugin-flow-services-rest,
odl-jolokia,
decanter-collector-jmx,
decanter-appender-elasticsearch
# Job images
odl_system_flavor: '8 GB General Purpose v1'
- tools_system_image: 'Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300'
+ tools_system_image: 'Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221'
# Features to install
# yamllint disable-line rule:line-length
install-features: >
- odl-openflowplugin-flow-services-ui,
+ odl-openflowplugin-flow-services-rest,
odl-jolokia,
decanter-collector-jmx,
decanter-appender-elasticsearch
scope: 'only'
# Features to install
- install-features: 'odl-openflowplugin-flow-services-ui,odl-openflowplugin-app-table-miss-enforcer'
+ install-features: 'odl-openflowplugin-flow-services-rest,odl-openflowplugin-app-table-miss-enforcer'
# Robot custom options
robot-options: '-v SWITCHES:3'
# mininet image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
scope: 'only'
# Features to install
- install-features: 'odl-openflowplugin-flow-services-ui,decanter-collector-jmx,decanter-appender-elasticsearch'
+ install-features: 'odl-openflowplugin-flow-services-rest,decanter-collector-jmx,decanter-appender-elasticsearch'
# Robot custom options
robot-options: '-v TOPO_TREE_DEPTH:7'
# Job images
odl_system_flavor: '8 GB General Purpose v1'
- tools_system_image: 'Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300'
+ tools_system_image: 'Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221'
# Features to install
- install-features: 'odl-openflowplugin-flow-services-ui'
+ install-features: 'odl-openflowplugin-flow-services-rest'
# Robot custom options
robot-options: '-v flnr:100000 -v swnr:32 -v fpr:200'
# Features to install
install-features: >
- odl-openflowplugin-flow-services-ui,
+ odl-openflowplugin-flow-services-rest,
decanter-collector-jmx,
decanter-appender-elasticsearch
robot-options: ''
# mininet image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Plot Info
01-plot-title: 'Maximum Switches Linear Topology'
# -o pipefail: Fail on errors in scripts this calls, give stacktrace
set -ex -o pipefail
-# Install required packages
-sudo apt-get install -y --force-yes \
- build-essential \
- devscripts \
- equivs \
- dh-systemd \
- python-yaml \
- python-jinja2 \
- gdebi
-
# Build release specified by build params
"$WORKSPACE/packaging/deb/build.py" --major "$VERSION_MAJOR" \
--minor "$VERSION_MINOR" \
sudo apt-get install -y opendaylight
else
echo "URL is not a link to a PPA repo or .deb"
+ exit 1
fi
-# Install expect to interact with karaf shell
-sudo apt-get install -y expect
-
# Start OpenDaylight
sudo systemctl start opendaylight
# Get process id of Java
pgrep java
+
+# Install expect to interact with karaf shell
+sudo apt-get install -y expect
# This script starts the karaf shell and sends the password for SSH auth.
# Further tests in karaf shell can be done here
+# Echo commands
+log_user 1
+
# Default password
set password "karaf"
# Default prompt
# SSH into Karaf shell
spawn ssh -p 8101 -o StrictHostKeyChecking=no karaf@127.0.0.1
+expect "Password authentication"
expect "Password: "
send "$password\r"
# Verify expected features
expect "$prompt"
-send "feature:list | grep netvirt-openstack\r"
+send "feature:list | grep odl-netvirt-openstack\r"
+expect {{
+ timeout {{
+ send_user "\nTest feature not found"
+ exit 1
+ }}
+ "OpenDaylight :: NetVirt :: OpenStack" {{
+ send_user "\nTest feature available"
+ }}
+}}
+
+# Install feature
+send "feature:install odl-netvirt-openstack\r"
+expect {{
+ "Error executing command: Can't install feature" {{
+ send_user "\nFailed to install test feature"
+ exit 1
+ }}
+}}
+
+# Verify installed feature is actually installed
expect "$prompt"
+send "feature:list | grep odl-netvirt-openstack\r"
+expect {{
+ timeout {{
+ send_user "\nTest feature not installed\n"
+ exit 1
+ }}
+ " x " {{
+ send_user "\nTest feature installed successfully\n"
+ }}
+}}
# TODO Add further tests here
# -o pipefail: Fail on errors in scripts this calls, give stacktrace
set -ex -o pipefail
-# Remove opendaylight if already installed
-if rpm -q opendaylight > /dev/null;
-then
- sudo yum remove -y opendaylight;
-fi
-
# Install ODL from .rpm link or .repo url
if [[ $URL == *.rpm ]]
then
sudo yum install -y opendaylight
else
echo "URL is not a link to .rpm or .repo"
+ exit 1
fi
-# Install expect to interact with karaf shell
-sudo yum install -y expect
-
# Start OpenDaylight
sudo systemctl start opendaylight
# Get process id of Java
pgrep java
+
+# Install expect to interact with karaf shell
+sudo yum install -y expect
- string:
name: DOWNLOAD_URL
# yamllint disable-line rule:line-length
- default: 'https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.5.3-Boron-SR3/distribution-karaf-0.5.3-Boron-SR3.tar.gz'
+ default: 'https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.6.0-Carbon/distribution-karaf-0.6.0-Carbon.tar.gz'
description: 'URL to ODL tarball artifact to repackage into RPM'
- string:
name: CHANGELOG_NAME
- string:
name: URL
# yamllint disable-line rule:line-length
- default: 'https://raw.githubusercontent.com/opendaylight/integration-packaging/master/rpm/example_repo_configs/opendaylight-52-release.repo'
+ default: 'https://raw.githubusercontent.com/opendaylight/integration-packaging/master/rpm/example_repo_configs/opendaylight-60-release.repo'
description: 'Link to .repo or .rpm file'
scm:
stack-template: csit-2-instance-type.yaml
docker_system_count: 1
docker_system_flavor: 4 GB General Purpose v1
- docker_system_image: CentOS 7 - docker - 20170120-1434
+ docker_system_image: CentOS 7 - docker - 20170609-0220
odl_system_count: 1
odl_system_flavor: 4 GB General Purpose v1
odl_system_image: CentOS 7 - java-builder - 20170609-0259
openstack_system_image: CentOS 7 - devstack - 20170609-0220
tools_system_count: 1
tools_system_flavor: 2 GB General Purpose v1
- tools_system_image: Ubuntu 14.04 - mininet - 20170210-0439
+ tools_system_image: Ubuntu 14.04 - mininet - 20170609-0220
# Default Robot framework options
robot-options: ''
# Data for csit-verify jobs
# Branch for "last" version detection
- verify-branch: stable/boron
+ verify-branch: stable/carbon
# Value for ODL_STREAM
- verify-stream: boron
+ verify-stream: carbon
verify-karaf-version: karaf3
verify-jdkversion: openjdk8
netvirt-csit-hwvtep-3node-openstack-newton-upstream-transparent-nitrogen,
nic-csit-1node-basic-all-nitrogen,
nic-csit-1node-basic-only-nitrogen,
- nic-csit-1node-vtnrenderer-all-nitrogen,
- nic-csit-1node-vtnrenderer-only-nitrogen,
ocpplugin-csit-1node-get-all-nitrogen,
ocpplugin-csit-1node-get-only-nitrogen,
ocpplugin-csit-1node-scalability-all-nitrogen,
netvirt-csit-hwvtep-3node-openstack-newton-upstream-transparent-carbon,
nic-csit-1node-basic-all-carbon,
nic-csit-1node-basic-only-carbon,
- nic-csit-1node-vtnrenderer-all-carbon,
- nic-csit-1node-vtnrenderer-only-carbon,
ocpplugin-csit-1node-get-all-carbon,
ocpplugin-csit-1node-get-only-carbon,
ocpplugin-csit-1node-scalability-all-carbon,
netvirt-legacy-csit-3node-openstack-ocata-upstream-boron,
nic-csit-1node-basic-all-boron,
nic-csit-1node-basic-only-boron,
- nic-csit-1node-vtnrenderer-all-boron,
- nic-csit-1node-vtnrenderer-only-boron,
ocpplugin-csit-1node-get-all-boron,
ocpplugin-csit-1node-get-only-boron,
ocpplugin-csit-1node-scalability-all-boron,
templates: mininet
- platforms: ubuntu-16.04
templates: gbp
+ - platforms: ubuntu-16.04
+ templates: baseline
+ - platforms: centos
+ templates: baseline
- job-template:
name: ARCHIVE_ARTIFACTS
default: >
{artifacts}
- **/target/surefire-reports/*-output.txt
+ **/target/surefire-reports/*.txt
+ **/target/surefire-reports/*.xml
+ **/target/failsafe-reports/*.txt
+ **/target/failsafe-reports/*.xml
**/hs_err_*.log
**/target/feature/feature.xml
**/*.hprof
healthy: 50
unhealthy: 40
+- builder:
+ # Deploys a maven site to Nexus using lftools nexus-zip command
+ name: opendaylight-infra-deploy-maven-site
+ builders:
+ - lf-provide-maven-settings:
+ global-settings-file: global-settings
+ settings-file: '{settings-file}'
+ - lf-infra-create-netrc:
+ server-id: opendaylight-site
+ - shell: !include-raw-escape:
+ - global-jjb/shell/lftools-install.sh
+ - opendaylight-infra-deploy-maven-site.sh
+ - lf-provide-maven-settings-cleanup
+
- builder:
name: opendaylight-infra-stack
# opendaylight-infra-stack.sh has a required variable {stack-template} that
- file-id: 'packer-cloud-env'
variable: 'CLOUDENV'
- shell: |
+ #!/bin/bash
cd packer
varfiles="../packer/vars/*"
templates="../packer/templates/*"
- file-id: 'packer-cloud-env'
variable: 'CLOUDENV'
- shell: |
+ #!/bin/bash
cd packer
export PACKER_LOG="yes" && \
export PACKER_LOG_PATH="packer-build.log" && \
packer.io build -color=false -var-file=$CLOUDENV \
-var-file=../packer/vars/{platform}.json \
../packer/templates/{template}.json
+ # Split public and private cloud logs
+ grep -e 'public_cloud' packer-build.log > packer-build_public_cloud.log 2>&1
+ grep -e 'private_cloud' packer-build.log > packer-build_private_cloud.log 2>&1
- builder:
# TODO: Verify signature after downloading users public key from a locally created
branch: '{branch}'
refspec: 'refs/heads/{branch}'
artifacts: '{archive-artifacts}'
+ - string:
+ name: STREAM
+ default: '{stream}'
+ description: "String representing release name"
scm:
- gerrit-trigger-scm:
settings-type: cfp
global-settings: 'global-settings'
global-settings-type: cfp
- - maven-target:
- maven-version: 'mvn33'
- pom: deploy-site.xml
- goals: 'site:deploy -V -B -Dstream={stream}'
- java-opts:
- - '-Xmx2g'
- settings: '{mvn-settings}'
- settings-type: cfp
- global-settings: 'global-settings'
- global-settings-type: cfp
+ - opendaylight-infra-deploy-maven-site:
+ settings-file: '{mvn-settings}'
reporters:
- findbugs
+++ /dev/null
----
-- project:
- name: tcpmd5-nitrogen
- jobs:
- - '{project-name}-clm-{stream}'
- - '{project-name}-integration-{stream}'
- - '{project-name}-merge-{stream}'
- - '{project-name}-verify-{stream}-{maven}-{jdks}'
-
- stream: nitrogen
- project: 'tcpmd5'
- project-name: 'tcpmd5'
- branch: 'master'
- jdk: openjdk8
- jdks:
- - openjdk8
-
- maven:
- - mvn33:
- mvn-version: 'mvn33'
- mvn-settings: 'tcpmd5-settings'
- mvn-goals: 'clean -DrepoBuild install javadoc:aggregate'
- mvn-opts: '-Xmx1024m -XX:MaxPermSize=256m'
- dependencies: 'odlparent-merge-{stream},yangtools-merge-{stream},controller-merge-{stream}'
- email-upstream: '[tcpmd5] [odlparent] [yangtools] [controller]'
- archive-artifacts: ''
-
-- project:
- name: tcpmd5-carbon
- jobs:
- - '{project-name}-clm-{stream}'
- - '{project-name}-integration-{stream}'
- - '{project-name}-merge-{stream}'
- - '{project-name}-verify-{stream}-{maven}-{jdks}'
-
- stream: carbon
- project: 'tcpmd5'
- project-name: 'tcpmd5'
- branch: 'stable/carbon'
- karaf-version: karaf3
- jdk: openjdk8
- jdks:
- - openjdk8
-
- maven:
- - mvn33:
- mvn-version: 'mvn33'
- mvn-settings: 'tcpmd5-settings'
- mvn-goals: 'clean -DrepoBuild install javadoc:aggregate'
- mvn-opts: '-Xmx1024m -XX:MaxPermSize=256m'
- dependencies: 'odlparent-merge-{stream},yangtools-merge-{stream},controller-merge-{stream}'
- email-upstream: '[tcpmd5] [odlparent] [yangtools] [controller]'
- archive-artifacts: ''
-
-- project:
- name: tcpmd5-boron
- jobs:
- - '{project-name}-clm-{stream}'
- - '{project-name}-integration-{stream}'
- - '{project-name}-merge-{stream}'
- - '{project-name}-verify-{stream}-{maven}-{jdks}'
-
- stream: boron
- project: 'tcpmd5'
- project-name: 'tcpmd5'
- branch: 'stable/boron'
- karaf-version: karaf3
- jdk: openjdk8
- jdks:
- - openjdk8
-
- maven:
- - mvn33:
- mvn-version: 'mvn33'
- mvn-settings: 'tcpmd5-settings'
- mvn-goals: 'clean -DrepoBuild install javadoc:aggregate'
- mvn-opts: '-Xmx1024m -XX:MaxPermSize=256m'
- dependencies: 'odlparent-merge-{stream},yangtools-merge-{stream},controller-merge-{stream}'
- email-upstream: '[tcpmd5] [odlparent] [yangtools] [controller]'
- archive-artifacts: ''
-
-- project:
- name: tcpmd5-sonar
- jobs:
- - '{project-name}-sonar'
- project: 'tcpmd5'
- project-name: 'tcpmd5'
- branch: 'master'
- mvn-settings: 'tcpmd5-settings'
- mvn-goals: 'clean -DrepoBuild install javadoc:aggregate'
- mvn-opts: '-Xmx1024m -XX:MaxPermSize=256m'
- '{project-name}-distribution-check-{stream}'
- '{project-name}-integration-{stream}'
- '{project-name}-merge-{stream}'
+ - '{project-name}-validate-autorelease-{stream}'
- '{project-name}-verify-{stream}-{maven}-{jdks}'
stream: nitrogen
robot-options: ''
# mininet image
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
# Robot custom options
robot-options: ''
- tools_system_image: 'Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300'
+ tools_system_image: 'Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221'
branch: 'stable/carbon'
jre: 'openjdk8'
karaf-version: karaf3
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
- boron:
branch: 'stable/boron'
jre: 'openjdk8'
karaf-version: karaf3
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
install:
- only:
# Robot custom options
robot-options: ''
- tools_system_image: Ubuntu 14.04 - mininet-ovs-25 - 20170210-0300
+ tools_system_image: Ubuntu 16.04 - mininet-ovs-25 - 20170609-0221
- newton:
openstack-branch: 'stable/newton'
odl-ml2-branch: 'stable/newton'
- openstack_system_image: 'CentOS 7 - devstack-newton - 20170314-2256'
+ openstack_system_image: 'CentOS 7 - devstack-newton - 20170609-0220'
schedule: ''
# Retry installing package 5 times if necessary
for i in {0..5}
do
+ echo "$i: Installing $pkg"
if [ "$(dpkg-query -W -f='${Status}' "$pkg" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then
apt-cache policy "$pkg"
apt-get install "$pkg"
echo '---> Disabling automatic daily upgrades'
sed -ine 's/"1"/"0"/g' /etc/apt/apt.conf.d/10periodic
echo 'APT::Periodic::Unattended-Upgrade "0";' >> /etc/apt/apt.conf.d/10periodic
+
+ # Install packaging job dependencies for building debs
+ ensure_ubuntu_install build-essential devscripts equivs dh-systemd python-yaml \
+ python-jinja2 gdebi
+
}
all_systems() {
echo '---> Pre-installing yum and pip packages'
projs="requirements keystone glance cinder neutron nova horizon"
+# shellcheck disable=SC2154
branch=${os_branch}
wget https://bootstrap.pypa.io/get-pip.py