├── scripts ├── release ├── ci ├── entry ├── version ├── package └── download ├── .dockerignore ├── .gitignore ├── .drone.yml ├── Makefile ├── package └── Dockerfile ├── Dockerfile.dapper └── README.md /scripts/release: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | exec $(dirname $0)/ci 4 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | build 2 | bin 3 | dist 4 | .trash-cache 5 | .dapper 6 | -------------------------------------------------------------------------------- /scripts/ci: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | cd $(dirname $0) 5 | ./download 6 | ./package 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /bin 2 | /dist 3 | /.trash-cache 4 | /.dapper 5 | /trash 6 | /build 7 | /downloads 8 | .DS_Store 9 | /package/*.tar.gz 10 | -------------------------------------------------------------------------------- /.drone.yml: -------------------------------------------------------------------------------- 1 | --- 2 | pipeline: 3 | build: 4 | privileged: true 5 | image: rancher/dapper:1.11.2 6 | volumes: 7 | - /var/run/docker.sock:/var/run/docker.sock 8 | commands: 9 | - dapper ci 10 | -------------------------------------------------------------------------------- /scripts/entry: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | trap "chown -R $DAPPER_UID:$DAPPER_GID ." exit 5 | 6 | mkdir -p bin dist downloads 7 | if [ -e ./scripts/$1 ]; then 8 | ./scripts/"$@" 9 | else 10 | "$@" 11 | fi 12 | -------------------------------------------------------------------------------- /scripts/version: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -n "$(git status --porcelain --untracked-files=no)" ]; then 4 | DIRTY="-dirty" 5 | fi 6 | 7 | COMMIT=$(git rev-parse --short HEAD) 8 | GIT_TAG=$(git tag -l --contains HEAD | head -n 1) 9 | 10 | if [[ -z "$DIRTY" && -n "$GIT_TAG" ]]; then 11 | VERSION=$GIT_TAG 12 | else 13 | VERSION="${COMMIT}${DIRTY}" 14 | fi 15 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | TARGETS := $(shell ls scripts) 2 | 3 | .dapper: 4 | @echo Downloading dapper 5 | @curl -sL https://releases.rancher.com/dapper/latest/dapper-`uname -s`-`uname -m` > .dapper.tmp 6 | @@chmod +x .dapper.tmp 7 | @./.dapper.tmp -v 8 | @mv .dapper.tmp .dapper 9 | 10 | $(TARGETS): .dapper 11 | ./.dapper $@ 12 | 13 | trash: .dapper 14 | ./.dapper -m bind trash 15 | 16 | trash-keep: .dapper 17 | ./.dapper -m bind trash -k 18 | 19 | .DEFAULT_GOAL := ci 20 | -------------------------------------------------------------------------------- /scripts/package: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ARCH=${ARCH:-"amd64"} 4 | SUFFIX="" 5 | [ "${ARCH}" != "amd64" ] && SUFFIX="_${ARCH}" 6 | 7 | source $(dirname $0)/version 8 | 9 | cd $(dirname $0)/../package 10 | 11 | TAG=${TAG:-${VERSION}${SUFFIX}} 12 | REPO=${REPO:-rancher} 13 | 14 | if $(echo ${TAG} | grep -q dirty); then 15 | TAG=dev 16 | fi 17 | 18 | IMAGE=${REPO}/net:${TAG} 19 | docker build -t ${IMAGE} . 20 | echo ${IMAGE} > ../dist/images 21 | echo Built ${IMAGE} 22 | -------------------------------------------------------------------------------- /package/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rancher/agent-base:v0.3.0 2 | 3 | RUN apt-get update && \ 4 | apt-get install --no-install-recommends -y \ 5 | ipset && \ 6 | rm -rf /var/lib/apt/lists/* 7 | 8 | ENV CNI v0.3.0 9 | 10 | ADD rancher-vxlan.tar.gz / 11 | ADD rancher-ipsec.tar.gz / 12 | ADD rancher-cni-bridge.tar.gz /opt/cni/bin 13 | ADD rancher-cni-ipam.tar.gz /opt/cni/bin 14 | ADD rancher-cni-driver.tar.gz / 15 | ADD rancher-per-host-subnet.tar.gz / 16 | ADD rancher-host-local-ipam.tar.gz /opt/cni/bin 17 | 18 | RUN mkdir -p /etc/cni/net.d \ 19 | && curl -sfSL https://github.com/containernetworking/cni/releases/download/${CNI}/cni-${CNI}.tgz | tar xvzf - -C /tmp ./loopback \ 20 | && mv /tmp/* /opt/cni/bin 21 | 22 | CMD ["sleep", "infinity"] 23 | -------------------------------------------------------------------------------- /Dockerfile.dapper: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | # FROM arm=armhf/ubuntu:16.04 3 | 4 | ARG DAPPER_HOST_ARCH 5 | ENV HOST_ARCH=${DAPPER_HOST_ARCH} ARCH=${DAPPER_HOST_ARCH} 6 | 7 | RUN apt-get update && \ 8 | apt-get install -y gcc ca-certificates git wget curl vim less file && \ 9 | rm -f /bin/sh && ln -s /bin/bash /bin/sh 10 | 11 | ENV GOLANG_ARCH_amd64=amd64 GOLANG_ARCH_arm=armv6l GOLANG_ARCH=GOLANG_ARCH_${ARCH} \ 12 | GOPATH=/go PATH=/go/bin:/usr/local/go/bin:${PATH} SHELL=/bin/bash 13 | 14 | RUN wget -O - https://storage.googleapis.com/golang/go1.7.3.linux-${!GOLANG_ARCH}.tar.gz | tar -xzf - -C /usr/local && \ 15 | go get github.com/rancher/trash && go get github.com/golang/lint/golint 16 | 17 | ENV DOCKER_URL_amd64=https://get.docker.com/builds/Linux/x86_64/docker-1.10.3 \ 18 | DOCKER_URL_arm=https://github.com/rancher/docker/releases/download/v1.10.3-ros1/docker-1.10.3_arm \ 19 | DOCKER_URL=DOCKER_URL_${ARCH} 20 | 21 | RUN wget -O - ${!DOCKER_URL} > /usr/bin/docker && chmod +x /usr/bin/docker 22 | 23 | ENV DAPPER_ENV \ 24 | REPO TAG \ 25 | RANCHER_CNI_BRIDGE_REPO RANCHER_CNI_BRIDGE_TAG \ 26 | RANCHER_CNI_IPAM_REPO RANCHER_CNI_IPAM_TAG \ 27 | RANCHER_IPSEC_REPO RANCHER_IPSEC_TAG \ 28 | RANCHER_VXLAN_REPO RANCHER_VXLAN_TAG \ 29 | RANCHER_CNI_DRIVER_REPO RANCHER_CNI_DRIVER_TAG \ 30 | RANCHER_PER_HOST_SUBNET_REPO RANCHER_PER_HOST_SUBNET_TAG \ 31 | RANCHER_HOST_LOCAL_IPAM_REPO RANCHER_HOST_LOCAL_IPAM_TAG 32 | 33 | ENV DAPPER_SOURCE /go/src/github.com/rancher/rancher-net 34 | ENV DAPPER_OUTPUT ./bin ./dist ./downloads 35 | ENV DAPPER_DOCKER_SOCKET true 36 | ENV TRASH_CACHE ${DAPPER_SOURCE}/.trash-cache 37 | ENV HOME ${DAPPER_SOURCE} 38 | WORKDIR ${DAPPER_SOURCE} 39 | 40 | ENTRYPOINT ["./scripts/entry"] 41 | CMD ["ci"] 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | rancher-net 2 | ======== 3 | 4 | This repository is used for packaging all the networking related 5 | binaries into a single image. 6 | 7 | You can find the actual code here: 8 | - IPSec: https://github.com/rancher/ipsec 9 | - VXLAN: https://github.com/rancher/vxlan 10 | - Per Host Subnet: https://github.com/rancher/per-host-subnet 11 | - Rancher CNI Bridge Plugin: https://github.com/rancher/rancher-cni-bridge 12 | - Rancher CNI IPAM Plugin: https://github.com/rancher/rancher-cni-ipam 13 | - Rancher Host Local IPAM Plugin: https://github.com/rancher/rancher-host-local-ipam 14 | - CNI Driver: https://github.com/rancher/cni-driver 15 | 16 | ## Building 17 | 18 | `make` 19 | 20 | If you would like to build using a custom repo and tag: 21 | 22 | `REPO=your_docker_repo TAG=dev_or_sth_else make release` 23 | 24 | The individual binaries can be customized during the build using the following: 25 | 26 | Repos: 27 | 28 | - RANCHER_IPSEC_REPO 29 | - RANCHER_VXLAN_REPO 30 | - RANCHER_CNI_BRIDGE_REPO 31 | - RANCHER_CNI_IPAM_REPO 32 | - RANCHER_CNI_DRIVER_REPO 33 | - RANCHER_PER_HOST_SUBNET_REPO 34 | - RANCHER_HOST_LOCAL_IPAM_REPO 35 | 36 | Tags: 37 | 38 | - RANCHER_IPSEC_TAG 39 | - RANCHER_VXLAN_TAG 40 | - RANCHER_CNI_BRIDGE_TAG 41 | - RANCHER_CNI_IPAM_TAG 42 | - RANCHER_CNI_DRIVER_TAG 43 | - RANCHER_PER_HOST_SUBNET_TAG 44 | - RANCHER_HOST_LOCAL_IPAM_TAG 45 | 46 | 47 | For example: 48 | 49 | ``` 50 | REPO=leodotcloud TAG=test RANCHER_IPSEC_REPO=leodotcloud RANCHER_IPSEC_TAG=dev make 51 | ``` 52 | 53 | This would pick up the ipsec binaries from the private `dev` release and package them in the docker image `leodotcloud/net:test`. 54 | 55 | ## Running 56 | 57 | Different Networking catalog items are built using `rancher/net` docker image and one of them can be selected here: https://github.com/rancher/rancher-catalog 58 | 59 | ## License 60 | Copyright (c) 2014-2017 [Rancher Labs, Inc.](http://rancher.com) 61 | 62 | Licensed under the Apache License, Version 2.0 (the "License"); 63 | you may not use this file except in compliance with the License. 64 | You may obtain a copy of the License at 65 | 66 | [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) 67 | 68 | Unless required by applicable law or agreed to in writing, software 69 | distributed under the License is distributed on an "AS IS" BASIS, 70 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 71 | See the License for the specific language governing permissions and 72 | limitations under the License. 73 | -------------------------------------------------------------------------------- /scripts/download: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | set -e 3 | 4 | cd $(dirname $0)/.. 5 | 6 | # Repos 7 | RANCHER_IPSEC_REPO="${RANCHER_IPSEC_REPO:-rancher}" 8 | RANCHER_VXLAN_REPO="${RANCHER_VXLAN_REPO:-rancher}" 9 | RANCHER_CNI_BRIDGE_REPO="${RANCHER_CNI_BRIDGE_REPO:-rancher}" 10 | RANCHER_CNI_IPAM_REPO="${RANCHER_CNI_IPAM_REPO:-rancher}" 11 | RANCHER_CNI_DRIVER_REPO="${RANCHER_CNI_DRIVER_REPO:-rancher}" 12 | RANCHER_PER_HOST_SUBNET_REPO="${RANCHER_PER_HOST_SUBNET_REPO:-rancher}" 13 | RANCHER_HOST_LOCAL_IPAM_REPO="${RANCHER_HOST_LOCAL_IPAM_REPO:-rancher}" 14 | 15 | # Tags 16 | RANCHER_IPSEC_TAG="${RANCHER_IPSEC_TAG:-v0.1.4}" 17 | RANCHER_VXLAN_TAG="${RANCHER_VXLAN_TAG:-v0.1.3}" 18 | RANCHER_CNI_BRIDGE_TAG="${RANCHER_CNI_BRIDGE_TAG:-v0.7.1}" 19 | RANCHER_CNI_IPAM_TAG="${RANCHER_CNI_IPAM_TAG:-v0.2.1}" 20 | RANCHER_CNI_DRIVER_TAG="${RANCHER_CNI_DRIVER_TAG:-v0.1.0}" 21 | RANCHER_PER_HOST_SUBNET_TAG="${RANCHER_PER_HOST_SUBNET_TAG:-v0.1.1}" 22 | RANCHER_HOST_LOCAL_IPAM_TAG="${RANCHER_HOST_LOCAL_IPAM_TAG:-v0.1.0}" 23 | 24 | 25 | mkdir -p downloads 26 | 27 | # rancher-ipsec 28 | echo "rancher-ipsec: REPO=${RANCHER_IPSEC_REPO} TAG=${RANCHER_IPSEC_TAG}" 29 | 30 | if [ ! -f downloads/rancher-ipsec-amd64-${RANCHER_IPSEC_TAG}.tar.gz ]; then 31 | echo "Downloading rancher-ipsec-amd64-${RANCHER_IPSEC_TAG}.tar.gz" 32 | curl -sfSL https://github.com/${RANCHER_IPSEC_REPO}/ipsec/releases/download/${RANCHER_IPSEC_TAG}/rancher-ipsec-amd64-${RANCHER_IPSEC_TAG}.tar.gz > downloads/rancher-ipsec-amd64-${RANCHER_IPSEC_TAG}.tar.gz 33 | else 34 | echo "Already downloaded: rancher-ipsec-amd64-${RANCHER_IPSEC_TAG}.tar.gz" 35 | fi 36 | 37 | cmp -s downloads/rancher-ipsec-amd64-${RANCHER_IPSEC_TAG}.tar.gz package/rancher-ipsec.tar.gz \ 38 | || echo "copying to package/rancher-ipsec.tar.gz"; cp downloads/rancher-ipsec-amd64-${RANCHER_IPSEC_TAG}.tar.gz package/rancher-ipsec.tar.gz 39 | 40 | 41 | # rancher-vxlan 42 | echo "rancher-vxlan: REPO=${RANCHER_VXLAN_REPO} TAG=${RANCHER_VXLAN_TAG}" 43 | 44 | if [ ! -f downloads/rancher-vxlan-amd64-${RANCHER_VXLAN_TAG}.tar.gz ]; then 45 | echo "Downloading rancher-vxlan-amd64-${RANCHER_VXLAN_TAG}.tar.gz" 46 | curl -sfSL https://github.com/${RANCHER_VXLAN_REPO}/vxlan/releases/download/${RANCHER_VXLAN_TAG}/rancher-vxlan-amd64-${RANCHER_VXLAN_TAG}.tar.gz > downloads/rancher-vxlan-amd64-${RANCHER_VXLAN_TAG}.tar.gz 47 | else 48 | echo "Already downloaded: rancher-vxlan-amd64-${RANCHER_VXLAN_TAG}.tar.gz" 49 | fi 50 | 51 | cmp -s downloads/rancher-vxlan-amd64-${RANCHER_VXLAN_TAG}.tar.gz package/rancher-vxlan.tar.gz \ 52 | || echo "copying to package/rancher-vxlan.tar.gz"; cp downloads/rancher-vxlan-amd64-${RANCHER_VXLAN_TAG}.tar.gz package/rancher-vxlan.tar.gz 53 | 54 | 55 | # rancher-cni-bridge 56 | echo "rancher-cni-bridge: REPO=${RANCHER_CNI_BRIDGE_REPO} TAG=${RANCHER_CNI_BRIDGE_TAG}" 57 | 58 | if [ ! -f downloads/rancher-cni-bridge-${RANCHER_CNI_BRIDGE_TAG}.tar.gz ]; then 59 | echo "Downloading rancher-cni-bridge-${RANCHER_CNI_BRIDGE_TAG}.tar.gz" 60 | curl -sfSL https://github.com/${RANCHER_CNI_BRIDGE_REPO}/rancher-cni-bridge/releases/download/${RANCHER_CNI_BRIDGE_TAG}/rancher-cni-bridge-${RANCHER_CNI_BRIDGE_TAG}.tar.gz > downloads/rancher-cni-bridge-${RANCHER_CNI_BRIDGE_TAG}.tar.gz 61 | else 62 | echo "Already downloaded: rancher-cni-bridge-${RANCHER_CNI_BRIDGE_TAG}.tar.gz" 63 | fi 64 | 65 | cmp -s downloads/rancher-cni-bridge-${RANCHER_CNI_BRIDGE_TAG}.tar.gz package/rancher-cni-bridge.tar.gz \ 66 | || echo "copying to package/rancher-cni-bridge.tar.gz"; cp downloads/rancher-cni-bridge-${RANCHER_CNI_BRIDGE_TAG}.tar.gz package/rancher-cni-bridge.tar.gz 67 | 68 | 69 | # rancher-cni-ipam 70 | echo "rancher-cni-ipam: REPO=${RANCHER_CNI_IPAM_REPO} TAG=${RANCHER_CNI_IPAM_TAG}" 71 | 72 | if [ ! -f downloads/rancher-cni-ipam-${RANCHER_CNI_IPAM_TAG}.tar.gz ]; then 73 | echo "Downloading rancher-cni-ipam-${RANCHER_CNI_IPAM_TAG}.tar.gz" 74 | curl -sfSL https://github.com/${RANCHER_CNI_IPAM_REPO}/rancher-cni-ipam/releases/download/${RANCHER_CNI_IPAM_TAG}/rancher-cni-ipam-${RANCHER_CNI_IPAM_TAG}.tar.gz > downloads/rancher-cni-ipam-${RANCHER_CNI_IPAM_TAG}.tar.gz 75 | else 76 | echo "Already downloaded: rancher-cni-ipam-${RANCHER_CNI_IPAM_TAG}.tar.gz" 77 | fi 78 | 79 | cmp -s downloads/rancher-cni-ipam-${RANCHER_CNI_IPAM_TAG}.tar.gz package/rancher-cni-ipam.tar.gz \ 80 | || echo "copying to package/rancher-cni-ipam.tar.gz"; cp downloads/rancher-cni-ipam-${RANCHER_CNI_IPAM_TAG}.tar.gz package/rancher-cni-ipam.tar.gz 81 | 82 | # rancher-cni-driver 83 | echo "rancher-cni-driver: REPO=${RANCHER_CNI_DRIVER_REPO} TAG=${RANCHER_CNI_DRIVER_TAG}" 84 | 85 | if [ ! -f downloads/rancher-cni-driver-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz ]; then 86 | echo "Downloading rancher-cni-driver-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz" 87 | curl -sfSL https://github.com/${RANCHER_CNI_DRIVER_REPO}/cni-driver/releases/download/${RANCHER_CNI_DRIVER_TAG}/rancher-cni-driver-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz > downloads/rancher-cni-driver-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz 88 | else 89 | echo "Already downloaded: rancher-cni-driver-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz" 90 | fi 91 | 92 | cmp -s downloads/rancher-cni-driver-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz package/rancher-cni-driver.tar.gz \ 93 | || echo "copying to package/rancher-cni-driver.tar.gz"; cp downloads/rancher-cni-driver-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz package/rancher-cni-driver.tar.gz 94 | 95 | 96 | # rancher-per-host-subnet 97 | echo "rancher-per-host-subnet: REPO=${RANCHER_PER_HOST_SUBNET_REPO} TAG=${RANCHER_PER_HOST_SUBNET_TAG}" 98 | 99 | if [ ! -f downloads/rancher-per-host-subnet-amd64-${RANCHER_PER_HOST_SUBNET_TAG}.tar.gz ]; then 100 | echo "Downloading rancher-per-host-subnet-amd64-${RANCHER_PER_HOST_SUBNET_TAG}.tar.gz" 101 | curl -sfSL https://github.com/${RANCHER_PER_HOST_SUBNET_REPO}/per-host-subnet/releases/download/${RANCHER_PER_HOST_SUBNET_TAG}/rancher-per-host-subnet-amd64-${RANCHER_PER_HOST_SUBNET_TAG}.tar.gz > downloads/rancher-per-host-subnet-amd64-${RANCHER_PER_HOST_SUBNET_TAG}.tar.gz 102 | else 103 | echo "Already downloaded: rancher-per-host-subnet-amd64-${RANCHER_PER_HOST_SUBNET_TAG}.tar.gz" 104 | fi 105 | 106 | cmp -s downloads/rancher-per-host-subnet-amd64-${RANCHER_PER_HOST_SUBNET_TAG}.tar.gz package/rancher-per-host-subnet.tar.gz \ 107 | || echo "copying to package/rancher-per-host-subnet.tar.gz"; cp downloads/rancher-per-host-subnet-amd64-${RANCHER_PER_HOST_SUBNET_TAG}.tar.gz package/rancher-per-host-subnet.tar.gz 108 | 109 | 110 | # rancher-host-local-ipam 111 | echo "rancher-host-local-ipam: REPO=${RANCHER_HOST_LOCAL_IPAM_REPO} TAG=${RANCHER_HOST_LOCAL_IPAM_TAG}" 112 | 113 | if [ ! -f downloads/rancher-host-local-ipam-amd64-${RANCHER_HOST_LOCAL_IPAM_TAG}.tar.gz ]; then 114 | echo "Downloading rancher-host-local-ipam-amd64-${RANCHER_HOST_LOCAL_IPAM_TAG}.tar.gz" 115 | curl -sfSL https://github.com/${RANCHER_HOST_LOCAL_IPAM_REPO}/rancher-host-local-ipam/releases/download/${RANCHER_HOST_LOCAL_IPAM_TAG}/rancher-host-local-ipam-amd64-${RANCHER_HOST_LOCAL_IPAM_TAG}.tar.gz > downloads/rancher-host-local-ipam-amd64-${RANCHER_HOST_LOCAL_IPAM_TAG}.tar.gz 116 | else 117 | echo "Already downloaded: rancher-host-local-ipam-amd64-${RANCHER_HOST_LOCAL_IPAM_TAG}.tar.gz" 118 | fi 119 | 120 | cmp -s downloads/rancher-host-local-ipam-amd64-${RANCHER_HOST_LOCAL_IPAM_TAG}.tar.gz package/rancher-host-local-ipam.tar.gz \ 121 | || echo "copying to package/rancher-host-local-ipam.tar.gz"; cp downloads/rancher-host-local-ipam-amd64-${RANCHER_CNI_DRIVER_TAG}.tar.gz package/rancher-host-local-ipam.tar.gz 122 | --------------------------------------------------------------------------------