summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/build-aarch64.yaml3
-rwxr-xr-xdeploy/adapters/ansible/kubernetes/ansible-kubernetes.yml12
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/2flannel-apps/tasks/main.yml22
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/2flannel/defaults/main.yml21
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/2flannel/handlers/main.yml61
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/main.yml73
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/pre-upgrade.yml14
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel-rbac.yml.j244
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel.yml.j2211
-rw-r--r--deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml45
-rwxr-xr-xdeploy/compass_conf/flavor/kubernetes.conf2
-rwxr-xr-xdeploy/compass_conf/package_installer/ansible-kubernetes.conf2
-rwxr-xr-xdeploy/compass_conf/role/kubernetes_ansible.conf9
-rw-r--r--deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl8
-rw-r--r--deploy/conf/vm_environment/k8-nosdn-nofeature-noha.yml1
-rw-r--r--deploy/conf/vm_environment/k8-nosdn-stor4nfv-ha.yml45
-rw-r--r--deploy/conf/vm_environment/k8-nosdn-stor4nfv-noha.yml28
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/files/opendaylight.service2
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/files/sfc.conf2
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-1.yml2
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-2.yml8
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/tasks/control-repos-1.yml4
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-1.yml4
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-2.yml2
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-3.yml6
-rw-r--r--plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-tacker-1.yml3
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/templates/odl_pkg.sh.j219
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/templates/org.apache.karaf.features.cfg6
-rwxr-xr-xplugins/odl_sfc/roles/setup-odl-sfc/vars/main.yml19
-rw-r--r--plugins/odl_sfc/roles/sfc-pre-2/files/odl_sfc.patch90
-rw-r--r--plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml32
-rw-r--r--plugins/stor4nfv/plugin.desc45
-rw-r--r--plugins/stor4nfv/roles/stor4nfv/files/configure_vars.sh39
-rw-r--r--plugins/stor4nfv/roles/stor4nfv/files/install_ansible.sh18
-rw-r--r--plugins/stor4nfv/roles/stor4nfv/tasks/main.yml13
-rw-r--r--plugins/stor4nfv/roles/stor4nfv/tasks/opensds.yml84
-rw-r--r--plugins/stor4nfv/roles/stor4nfv/templates/ceph.hosts.j214
-rw-r--r--plugins/stor4nfv/roles/stor4nfv/templates/opensds.hosts.j29
38 files changed, 960 insertions, 62 deletions
diff --git a/build/build-aarch64.yaml b/build/build-aarch64.yaml
index e197f33b..84352284 100644
--- a/build/build-aarch64.yaml
+++ b/build/build-aarch64.yaml
@@ -15,8 +15,7 @@ packages:
get_method: docker
url: linaro/compass-deck:latest
- # XXX: only supports k8s now
- - name: compass-tasks
+ - name: compass-tasks-k8s
description: "compass task container for kubernets deployment via kargo"
get_method: docker
url: linaro/compass-tasks-k8s:latest
diff --git a/deploy/adapters/ansible/kubernetes/ansible-kubernetes.yml b/deploy/adapters/ansible/kubernetes/ansible-kubernetes.yml
index bfdc8958..1eae8a97 100755
--- a/deploy/adapters/ansible/kubernetes/ansible-kubernetes.yml
+++ b/deploy/adapters/ansible/kubernetes/ansible-kubernetes.yml
@@ -42,3 +42,15 @@
max_fail_percentage: 0
roles:
- post-k8s
+
+- hosts: kube_node
+ remote_user: root
+ max_fail_percentage: 0
+ roles:
+ - storage
+
+- hosts: storage_master
+ remote_user: root
+ max_fail_percentage: 0
+ roles:
+ - stor4nfv
diff --git a/deploy/adapters/ansible/kubernetes/roles/2flannel-apps/tasks/main.yml b/deploy/adapters/ansible/kubernetes/roles/2flannel-apps/tasks/main.yml
new file mode 100644
index 00000000..a7ff10e2
--- /dev/null
+++ b/deploy/adapters/ansible/kubernetes/roles/2flannel-apps/tasks/main.yml
@@ -0,0 +1,22 @@
+---
+- name: "2Flannel | Create ServiceAccount ClusterRole and ClusterRoleBinding"
+ command: "{{ bin_dir }}/kubectl apply -f {{ kube_config_dir }}/cni-2flannel-rbac.yml"
+ run_once: true
+ when: rbac_enabled and two_flannel_rbac_manifest.changed
+
+- name: 2Flannel | Start Resources
+ kube:
+ name: "kube-2flannel"
+ kubectl: "{{ bin_dir }}/kubectl"
+ filename: "{{ kube_config_dir }}/cni-2flannel.yml"
+ resource: "ds"
+ namespace: "{{system_namespace}}"
+ state: "{{ item | ternary('latest','present') }}"
+ with_items: "{{ two_flannel_manifest.changed }}"
+ when: inventory_hostname == groups['kube-master'][0]
+
+- name: 2Flannel | Wait for flannel subnet.env file presence
+ wait_for:
+ path: /run/2flannel/networks/subnet1.env
+ delay: 5
+ timeout: 600
diff --git a/deploy/adapters/ansible/kubernetes/roles/2flannel/defaults/main.yml b/deploy/adapters/ansible/kubernetes/roles/2flannel/defaults/main.yml
new file mode 100644
index 00000000..f9e61eda
--- /dev/null
+++ b/deploy/adapters/ansible/kubernetes/roles/2flannel/defaults/main.yml
@@ -0,0 +1,21 @@
+---
+# Flannel public IP
+# The address that flannel should advertise as how to access the system
+# Disabled until https://github.com/coreos/flannel/issues/712 is fixed
+# flannel_public_ip: "{{ access_ip|default(ip|default(ansible_default_ipv4.address)) }}"
+
+## interface that should be used for flannel operations
+## This is actually an inventory node-level item
+# flannel_interface:
+
+# You can choose what type of flannel backend to use
+# please refer to flannel's docs : https://github.com/coreos/flannel/blob/master/README.md
+
+# Limits for apps
+flannel_memory_limit: 500M
+flannel_cpu_limit: 300m
+flannel_memory_requests: 64M
+flannel_cpu_requests: 150m
+
+two_flannel_network1: "{{ kube_pods_subnet }}"
+two_flannel_network2: "10.235.64.0/18"
diff --git a/deploy/adapters/ansible/kubernetes/roles/2flannel/handlers/main.yml b/deploy/adapters/ansible/kubernetes/roles/2flannel/handlers/main.yml
new file mode 100644
index 00000000..44ead00e
--- /dev/null
+++ b/deploy/adapters/ansible/kubernetes/roles/2flannel/handlers/main.yml
@@ -0,0 +1,61 @@
+---
+- name: 2Flannel | delete default docker bridge
+ command: ip link delete docker0
+ failed_when: false
+ notify: 2Flannel | restart docker
+
+- name: 2Flannel | delete 2flannel interface
+ command: ip link delete flannel0 && ip link delete flannel1
+ failed_when: false
+
+# special cases for atomic because it defaults to live-restore: true
+# So we disable live-restore to pickup the new flannel IP. After
+# we enable it, we have to restart docker again to pickup the new
+# setting and restore the original behavior
+- name: 2Flannel | restart docker
+ command: /bin/true
+ notify:
+ - 2Flannel | reload systemd
+ - 2Flannel | reload docker.socket
+ - 2Flannel | configure docker live-restore true (atomic)
+ - 2Flannel | reload docker
+ - 2Flannel | pause while Docker restarts
+ - 2Flannel | wait for docker
+
+- name: 2Flannel | reload systemd
+ shell: systemctl daemon-reload
+
+- name: 2Flannel | reload docker.socket
+ service:
+ name: docker.socket
+ state: restarted
+ when: ansible_os_family in ['CoreOS', 'Container Linux by CoreOS']
+
+- name: 2Flannel | configure docker live-restore true (atomic)
+ replace:
+ name: /etc/docker/daemon.json
+ regexp: '"live-restore":.*true'
+ replace: '"live-restore": false'
+ when: is_atomic
+
+- name: 2Flannel | reload docker
+ service:
+ name: docker
+ state: restarted
+
+- name: 2Flannel | pause while Docker restarts
+ pause:
+ seconds: 10
+ prompt: "Waiting for docker restart"
+
+- name: 2Flannel | wait for docker
+ command: "{{ docker_bin_dir }}/docker images"
+ register: docker_ready
+ retries: 10
+ delay: 5
+ until: docker_ready.rc == 0
+
+- name: 2Flannel | reload kubelet
+ service:
+ name: kubelet
+ state: restarted
diff --git a/deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/main.yml b/deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/main.yml
new file mode 100644
index 00000000..e7adeefe
--- /dev/null
+++ b/deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/main.yml
@@ -0,0 +1,73 @@
+---
+- include: pre-upgrade.yml
+
+- name: 2Flannel | Verify if br_netfilter module exists
+ shell: "modinfo br_netfilter"
+ register: modinfo_br_netfilter
+ failed_when: modinfo_br_netfilter.rc not in [0, 1]
+ changed_when: false
+
+- name: 2Flannel | Enable br_netfilter module
+ modprobe:
+ name: br_netfilter
+ state: present
+ when: modinfo_br_netfilter.rc == 0
+
+# kube-proxy needs net.bridge.bridge-nf-call-iptables enabled when found
+# if br_netfilter is not a module
+- name: 2Flannel | Check if bridge-nf-call-iptables key exists
+ command: "sysctl net.bridge.bridge-nf-call-iptables"
+ failed_when: false
+ changed_when: false
+ register: sysctl_bridge_nf_call_iptables
+
+- name: 2Flannel | Enable bridge-nf-call tables
+ sysctl:
+ name: "{{ item }}"
+ state: present
+ value: 1
+ reload: "yes"
+ when: modinfo_br_netfilter.rc == 1 and sysctl_bridge_nf_call_iptables.rc == 0
+ with_items:
+ - net.bridge.bridge-nf-call-iptables
+ - net.bridge.bridge-nf-call-arptables
+ - net.bridge.bridge-nf-call-ip6tables
+
+- name: 2Flannel | Install Multus CNI
+ shell: |-
+ /usr/bin/docker run --rm --network=host -v /opt/cni/bin/:/opt/cni/bin/ golang:1.9 \
+ bash -c \
+ "git clone https://github.com/Intel-Corp/multus-cni && \
+ cd multus-cni && ./build && cp bin/multus /opt/cni/bin"
+
+- name: 2Flannel | Create cni-flannel-rbac manifest
+ template:
+ src: cni-2flannel-rbac.yml.j2
+ dest: "{{ kube_config_dir }}/cni-2flannel-rbac.yml"
+ register: two_flannel_rbac_manifest
+ when: inventory_hostname == groups['kube-master'][0] and rbac_enabled
+
+- name: 2Flannel | Create cni-flannel manifest
+ template:
+ src: cni-2flannel.yml.j2
+ dest: "{{ kube_config_dir }}/cni-2flannel.yml"
+ register: two_flannel_manifest
+ when: inventory_hostname == groups['kube-master'][0]
+
+- name: 2Flannel | Set 2Flannel etcd configuration
+ shell: |-
+ ETCDCTL_CA_FILE=/etc/ssl/etcd/ssl/ca.pem \
+ ETCDCTL_CERT_FILE=/etc/ssl/etcd/ssl/node-{{ ansible_hostname }}.pem \
+ ETCDCTL_KEY_FILE=/etc/ssl/etcd/ssl/node-{{ ansible_hostname }}-key.pem \
+ {{ bin_dir }}/etcdctl --peers={{ etcd_access_addresses }} \
+ set /{{ cluster_name }}/{{ item.config }}/network/config \
+ '{ "Network": "{{ item.network }}", "Backend": {"Type":"udp", "Port":{{ item.port}} }}'
+ with_items:
+ - {config: "2flannel.1",
+ network: "{{ two_flannel_network1 }}",
+ port: 8285}
+ - {config: "2flannel.2",
+ network: "{{ two_flannel_network2 }}",
+ port: 8286}
+ delegate_to: "{{groups['etcd'][0]}}"
+ run_once: true
diff --git a/deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/pre-upgrade.yml b/deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/pre-upgrade.yml
new file mode 100644
index 00000000..a49002fe
--- /dev/null
+++ b/deploy/adapters/ansible/kubernetes/roles/2flannel/tasks/pre-upgrade.yml
@@ -0,0 +1,14 @@
+---
+- name: 2Flannel pre-upgrade | Purge legacy flannel systemd unit file
+ file:
+ path: "/etc/systemd/system/docker.service.d/flannel-options.conf"
+ state: absent
+ notify:
+ - 2Flannel | delete default docker bridge
+
+- name: 2Flannel pre-upgrade | Purge legacy Flannel static pod manifest
+ file:
+ path: "{{ kube_manifest_dir }}/flannel-pod.manifest"
+ state: absent
+ notify:
+ - 2Flannel | delete flannel interface
diff --git a/deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel-rbac.yml.j2 b/deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel-rbac.yml.j2
new file mode 100644
index 00000000..b4d1be11
--- /dev/null
+++ b/deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel-rbac.yml.j2
@@ -0,0 +1,44 @@
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: 2flannel
+ namespace: "{{system_namespace}}"
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+ name: 2flannel
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1beta1
+metadata:
+ name: 2flannel
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: 2flannel
+subjects:
+- kind: ServiceAccount
+ name: 2flannel
+ namespace: "{{system_namespace}}"
diff --git a/deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel.yml.j2 b/deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel.yml.j2
new file mode 100644
index 00000000..9c159d37
--- /dev/null
+++ b/deploy/adapters/ansible/kubernetes/roles/2flannel/templates/cni-2flannel.yml.j2
@@ -0,0 +1,211 @@
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: kube-2flannel-cfg1
+ namespace: "{{system_namespace}}"
+ labels:
+ tier: node
+ app: 2flannel
+data:
+ cni-conf.json: |
+ {
+ "name": "2flannel-networks",
+ "type": "multus",
+ "delegates": [
+ {
+ "type": "flannel",
+ "name": "flannel1",
+ "subnetFile": "/run/2flannel/networks/subnet2.env",
+ "dataDir": "/var/lib/cni/flannel/2",
+ "delegate": {
+ "bridge": "kbr1",
+ "isDefaultGateway": false
+ }
+ },
+ {
+ "type": "flannel",
+ "name": "flannel0",
+ "subnetFile": "/run/2flannel/networks/subnet1.env",
+ "dataDir": "/var/lib/cni/flannel/1",
+ "masterplugin": true,
+ "delegate": {
+ "bridge": "kbr0",
+ "isDefaultGateway": true
+ }
+ }
+ ]
+ }
+ net-conf.json: |
+ {
+ "Network": {{ two_flannel_network1 }},
+ "Backend": {
+ "Type": "udp",
+ "Port": 8285
+ }
+ }
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: kube-2flannel-cfg2
+ namespace: "{{system_namespace}}"
+ labels:
+ tier: node
+ app: 2flannel
+data:
+ net-conf.json: |
+ {
+ "Network": {{ two_flannel_network2 }},
+ "Backend": {
+ "Type": "udp",
+ "Port": 8286
+ }
+ }
+---
+apiVersion: extensions/v1beta1
+kind: DaemonSet
+metadata:
+ name: kube-2flannel
+ namespace: "{{system_namespace}}"
+ labels:
+ tier: node
+ k8s-app: 2flannel
+spec:
+ template:
+ metadata:
+ labels:
+ tier: node
+ k8s-app: 2flannel
+ spec:
+{% if rbac_enabled %}
+ serviceAccountName: 2flannel
+{% endif %}
+ containers:
+ - name: kube-2flannel-1
+ image: {{ flannel_image_repo }}:{{ flannel_image_tag }}
+ imagePullPolicy: {{ k8s_image_pull_policy }}
+ resources:
+ limits:
+ cpu: {{ flannel_cpu_limit }}
+ memory: {{ flannel_memory_limit }}
+ requests:
+ cpu: {{ flannel_cpu_requests }}
+ memory: {{ flannel_memory_requests }}
+ command: [ "/opt/bin/flanneld", "--ip-masq",
+ "-etcd-endpoints={{ etcd_access_addresses }}",
+ "-etcd-prefix=/{{ cluster_name }}/2flannel.1/network",
+ "-etcd-cafile=/etc/ssl/etcd/ssl/ca.pem",
+ "-etcd-certfile=/etc/ssl/etcd/ssl/node-$(NODE_NAME).pem",
+ "-etcd-keyfile=/etc/ssl/etcd/ssl/node-$(NODE_NAME)-key.pem",
+ "-subnet-file=/run/2flannel/networks/subnet1.env" ]
+ securityContext:
+ privileged: true
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ volumeMounts:
+ - name: run
+ mountPath: /run
+ - name: cni
+ mountPath: /etc/cni/net.d
+ - name: ssl
+ mountPath: /etc/ssl/etcd/ssl/
+ - name: 2flannel-cfg1
+ mountPath: /etc/kube-flannel/
+ - name: kube-2flannel-2
+ image: {{ flannel_image_repo }}:{{ flannel_image_tag }}
+ imagePullPolicy: {{ k8s_image_pull_policy }}
+ resources:
+ limits:
+ cpu: {{ flannel_cpu_limit }}
+ memory: {{ flannel_memory_limit }}
+ requests:
+ cpu: {{ flannel_cpu_requests }}
+ memory: {{ flannel_memory_requests }}
+ command: [ "/opt/bin/flanneld", "--ip-masq",
+ "-etcd-endpoints={{ etcd_access_addresses }}",
+ "-etcd-prefix=/{{ cluster_name }}/2flannel.2/network",
+ "-etcd-cafile=/etc/ssl/etcd/ssl/ca.pem",
+ "-etcd-certfile=/etc/ssl/etcd/ssl/node-$(NODE_NAME).pem",
+ "-etcd-keyfile=/etc/ssl/etcd/ssl/node-$(NODE_NAME)-key.pem",
+ "-subnet-file=/run/2flannel/networks/subnet2.env" ]
+ securityContext:
+ privileged: true
+ env:
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ volumeMounts:
+ - name: run
+ mountPath: /run
+ - name: cni
+ mountPath: /etc/cni/net.d
+ - name: ssl
+ mountPath: /etc/ssl/etcd/ssl/
+ - name: 2flannel-cfg2
+ mountPath: /etc/kube-flannel/
+ - name: install-cni
+ image: {{ flannel_cni_image_repo }}:{{ flannel_cni_image_tag }}
+ command: ["/install-cni.sh"]
+ env:
+ # The CNI network config to install on each node.
+ - name: CNI_NETWORK_CONFIG
+ valueFrom:
+ configMapKeyRef:
+ name: kube-2flannel-cfg1
+ key: cni-conf.json
+ - name: CNI_CONF_NAME
+ value: "10-multus-2flannel.conf"
+ volumeMounts:
+ - name: cni
+ mountPath: /host/etc/cni/net.d
+ - name: host-cni-bin
+ mountPath: /host/opt/cni/bin/
+ hostNetwork: true
+ tolerations:
+ - key: node-role.kubernetes.io/master
+ operator: Exists
+ effect: NoSchedule
+ volumes:
+ - name: run
+ hostPath:
+ path: /run
+ - name: cni
+ hostPath:
+ path: /etc/cni/net.d
+ - name: ssl
+ hostPath:
+ path: /etc/ssl/etcd/ssl/
+ - name: 2flannel-cfg1
+ configMap:
+ name: kube-2flannel-cfg1
+ - name: 2flannel-cfg2
+ configMap:
+ name: kube-2flannel-cfg2
+ - name: host-cni-bin
+ hostPath:
+ path: /opt/cni/bin
+ updateStrategy:
+ rollingUpdate:
+ maxUnavailable: {{ serial | default('20%') }}
+ type: RollingUpdate
diff --git a/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml b/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml
index f68eec43..187e2a52 100644
--- a/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml
+++ b/deploy/adapters/ansible/kubernetes/roles/kargo/tasks/main.yml
@@ -57,7 +57,6 @@
- netaddr
- jinja2
-
- name: copy inventories generate script
copy:
src: generate_inventories.py
@@ -156,6 +155,50 @@
- extra-vars-{{ ansible_architecture }}.yml
- extra-vars.yml
+- name: copy 2flannel playbook to kargo
+ copy:
+ src: "{{ run_dir }}/roles/2flannel"
+ dest: /opt/kargo_k8s/roles/network_plugin
+
+- name: copy 2flannel-apps playbook to kargo
+ copy:
+ src: "{{ run_dir }}/roles/2flannel-apps/"
+ dest: /opt/kargo_k8s/roles/kubernetes-apps/network_plugin/2flannel
+
+- name: append 2flannel to network plugin
+ blockinfile:
+ path: /opt/kargo_k8s/roles/network_plugin/meta/main.yml
+ block: " - role: network_plugin/2flannel\n \
+ when: kube_network_plugin == '2flannel'\n tags: 2flannel\n"
+
+- name: append 2flannel apps to network plugin
+ blockinfile:
+ path: /opt/kargo_k8s/roles/kubernetes-apps/network_plugin/meta/main.yml
+ block: " - role: kubernetes-apps/network_plugin/2flannel\n \
+ when: kube_network_plugin == '2flannel'\n tags: 2flannel\n"
+
+- name: append 2flannel to valid kube_network_plugin list
+ replace:
+ path: "/opt/kargo_k8s/roles/kubernetes/{{ item.path }}"
+ regexp: "{{ item.regexp }}"
+ replace: "{{ item.replace }}"
+ with_items:
+ - {path: 'master/templates/manifests/kube-controller-manager.manifest.j2',
+ regexp: '"cloud", "flannel"',
+ replace: '"cloud", "flannel", "2flannel"'}
+ - {path: 'node/templates/kubelet.kubeadm.env.j2',
+ regexp: '"calico", "canal", "flannel", "weave"',
+ replace: '"calico", "canal", "flannel", "weave", "2flannel"'}
+ - {path: 'node/templates/kubelet.standard.env.j2',
+ regexp: '"calico", "canal", "flannel", "weave"',
+ replace: '"calico", "canal", "flannel", "weave", "2flannel"'}
+ - {path: 'node/templates/kubelet.rkt.service.j2',
+ regexp: '"calico", "weave", "canal", "flannel"',
+ replace: '"calico", "weave", "canal", "flannel", "2flannel"'}
+ - {path: 'preinstall/tasks/main.yml',
+ regexp: '"calico", "weave", "canal", "flannel"',
+ replace: '"calico", "weave", "canal", "flannel", "2flannel"'}
+
- name: run kargo playbook
shell: |
cd /opt/kargo_k8s
diff --git a/deploy/compass_conf/flavor/kubernetes.conf b/deploy/compass_conf/flavor/kubernetes.conf
index 71acadff..e7e8ffc8 100755
--- a/deploy/compass_conf/flavor/kubernetes.conf
+++ b/deploy/compass_conf/flavor/kubernetes.conf
@@ -4,7 +4,7 @@ FLAVORS = [{
'display_name': 'ansible-kubernetes',
'template': 'ansible-kubernetes.tmpl',
'roles': [
- 'kube_master', 'etcd', 'kube_node', 'ha'
+ 'kube_master', 'etcd', 'kube_node', 'ha', 'storage_master', 'storage_node'
],
}]
diff --git a/deploy/compass_conf/package_installer/ansible-kubernetes.conf b/deploy/compass_conf/package_installer/ansible-kubernetes.conf
index 820691b7..044af9a9 100755
--- a/deploy/compass_conf/package_installer/ansible-kubernetes.conf
+++ b/deploy/compass_conf/package_installer/ansible-kubernetes.conf
@@ -7,7 +7,7 @@ SETTINGS = {
'playbook_file': 'site.yml',
'inventory_file': 'inventory.py',
'inventory_json_file': 'inventory.json',
- 'inventory_group': ['kube_master', 'etcd', 'kube_node', 'ha'],
+ 'inventory_group': ['kube_master', 'etcd', 'kube_node', 'ha', 'ceph_adm', 'ceph_mon', 'ceph_osd', 'storage_master', 'storage_node'],
'group_variable': 'all',
'etc_hosts_path': 'roles/pre-k8s/templates/hosts',
'runner_dirs': ['roles','kubernetes/roles']
diff --git a/deploy/compass_conf/role/kubernetes_ansible.conf b/deploy/compass_conf/role/kubernetes_ansible.conf
index c27779ad..f86902e3 100755
--- a/deploy/compass_conf/role/kubernetes_ansible.conf
+++ b/deploy/compass_conf/role/kubernetes_ansible.conf
@@ -15,6 +15,13 @@ ROLES = [{
'role': 'ha',
'display_name': 'ha',
'description': 'ha'
+}, {
+ 'role': 'storage_master',
+ 'display_name': 'storage master',
+ 'description': 'storage master'
+}, {
+ 'role': 'storage_node',
+ 'display_name': 'storage node',
+ 'description': 'storage node'
}
-
]
diff --git a/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl b/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl
index f132365a..f6d96c78 100644
--- a/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl
+++ b/deploy/compass_conf/templates/ansible_installer/kubernetes/vars/ansible-kubernetes.tmpl
@@ -40,6 +40,7 @@ deploy_type: $getVar('deploy_type', 'virtual')
public_cidr: $kube_nodes[0]['install']['subnet']
storage_cidr: "{{ ip_settings[inventory_hostname]['storage']['cidr'] }}"
mgmt_cidr: "{{ ip_settings[inventory_hostname]['mgmt']['cidr'] }}"
+external_cidr: "{{ ip_settings[inventory_hostname]['external']['cidr'] }}"
public_net_info: "{{ network_cfg.public_net_info }}"
host_ip_settings: "{{ ip_settings[inventory_hostname] }}"
@@ -159,6 +160,13 @@ CONGRESS_PASS: $congress_pass
DEMO_PASS: $demo_pass
ADMIN_PASS: $admin_pass
+#set plugins = $getVar('plugins', [])
+#for item in plugins
+#set keys = $item.keys()
+#set values = $item.values()
+$keys[0]: $values[0]
+#end for
+
#set neutron_service_plugins=['router']
#if $getVar('enable_fwaas', True)
diff --git a/deploy/conf/vm_environment/k8-nosdn-nofeature-noha.yml b/deploy/conf/vm_environment/k8-nosdn-nofeature-noha.yml
index 9912d59b..9c2c23fb 100644
--- a/deploy/conf/vm_environment/k8-nosdn-nofeature-noha.yml
+++ b/deploy/conf/vm_environment/k8-nosdn-nofeature-noha.yml
@@ -16,6 +16,7 @@ hosts:
roles:
- kube_master
- etcd
+ - ha
- name: host2
roles:
diff --git a/deploy/conf/vm_environment/k8-nosdn-stor4nfv-ha.yml b/deploy/conf/vm_environment/k8-nosdn-stor4nfv-ha.yml
new file mode 100644
index 00000000..e5e458f7
--- /dev/null
+++ b/deploy/conf/vm_environment/k8-nosdn-stor4nfv-ha.yml
@@ -0,0 +1,45 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+---
+TYPE: virtual
+FLAVOR: cluster
+
+plugins:
+ - stor4nfv: "Enable"
+
+hosts:
+ - name: host1
+ roles:
+ - kube_master
+ - etcd
+ - ha
+
+ - name: host2
+ roles:
+ - kube_master
+ - etcd
+ - ha
+
+ - name: host3
+ roles:
+ - kube_master
+ - etcd
+ - ha
+ - storage_master
+
+ - name: host4
+ roles:
+ - kube_node
+ - storage_node
+
+ - name: host5
+ roles:
+ - kube_node
+ - storage_node
diff --git a/deploy/conf/vm_environment/k8-nosdn-stor4nfv-noha.yml b/deploy/conf/vm_environment/k8-nosdn-stor4nfv-noha.yml
new file mode 100644
index 00000000..f8c29b3e
--- /dev/null
+++ b/deploy/conf/vm_environment/k8-nosdn-stor4nfv-noha.yml
@@ -0,0 +1,28 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+---
+TYPE: virtual
+FLAVOR: cluster
+
+plugins:
+ - stor4nfv: "Enable"
+
+hosts:
+ - name: host1
+ roles:
+ - kube_master
+ - etcd
+ - storage_master
+ - ha
+
+ - name: host2
+ roles:
+ - kube_node
+ - storage_node
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/files/opendaylight.service b/plugins/odl_sfc/roles/setup-odl-sfc/files/opendaylight.service
index a6966d82..fe125ccf 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/files/opendaylight.service
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/files/opendaylight.service
@@ -10,7 +10,7 @@ Type=simple
WorkingDirectory=/opt/opendaylight
PermissionsStartOnly=true
ExecStartPre=
-ExecStart=/usr/lib/jvm/java-8-oracle/bin/java -Djava.security.properties=/opt/opendaylight/etc/odl.java.security -server -Xms128M -Xmx2048m -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxremote -Djava.security.egd=file:/dev/./urandom -Djava.endorsed.dirs=/usr/lib/jvm/java-8-oracle/jre/lib/endorsed:/usr/lib/jvm/java-8-oracle/lib/endorsed:/opt/opendaylight/lib/endorsed -Djava.ext.dirs=/usr/lib/jvm/java-8-oracle/jre/lib/ext:/usr/lib/jvm/java-8-oracle/lib/ext:/opt/opendaylight/lib/ext -Dkaraf.instances=/opt/opendaylight/instances -Dkaraf.home=/opt/opendaylight -Dkaraf.base=/opt/opendaylight -Dkaraf.data=/opt/opendaylight/data -Dkaraf.etc=/opt/opendaylight/etc -Dkaraf.restart.jvm.supported=true -Djava.io.tmpdir=/opt/opendaylight/data/tmp -Djava.util.logging.config.file=/opt/opendaylight/etc/java.util.logging.properties -Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true -classpath /opt/opendaylight/lib/boot/org.apache.karaf.diagnostic.boot-4.0.9.jar:/opt/opendaylight/lib/boot/org.apache.karaf.jaas.boot-4.0.9.jar:/opt/opendaylight/lib/boot/org.apache.karaf.main-4.0.9.jar:/opt/opendaylight/lib/boot/org.osgi.core-6.0.0.jar org.apache.karaf.main.Main
+ExecStart=/usr/lib/jvm/java-8-oracle/bin/java -Djava.security.properties=/opt/opendaylight/etc/odl.java.security -server -Xms128M -Xmx2048m -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxremote -Djava.security.egd=file:/dev/./urandom -Djava.endorsed.dirs=/usr/lib/jvm/java-8-oracle/jre/lib/endorsed:/usr/lib/jvm/java-8-oracle/lib/endorsed:/opt/opendaylight/lib/endorsed -Djava.ext.dirs=/usr/lib/jvm/java-8-oracle/jre/lib/ext:/usr/lib/jvm/java-8-oracle/lib/ext:/opt/opendaylight/lib/ext -Dkaraf.instances=/opt/opendaylight/instances -Dkaraf.home=/opt/opendaylight -Dkaraf.base=/opt/opendaylight -Dkaraf.data=/opt/opendaylight/data -Dkaraf.etc=/opt/opendaylight/etc -Dkaraf.restart.jvm.supported=true -Djava.io.tmpdir=/opt/opendaylight/data/tmp -Djava.util.logging.config.file=/opt/opendaylight/etc/java.util.logging.properties -Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true -classpath /opt/opendaylight/lib/boot/org.apache.karaf.diagnostic.boot-4.0.10.jar:/opt/opendaylight/lib/boot/org.apache.karaf.jaas.boot-4.0.10.jar:/opt/opendaylight/lib/boot/org.apache.karaf.main-4.0.10.jar:/opt/opendaylight/lib/boot/org.osgi.core-6.0.0.jar org.apache.karaf.main.Main
Restart=on-failure
LimitNOFILE=65535
TimeoutStopSec=15
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/files/sfc.conf b/plugins/odl_sfc/roles/setup-odl-sfc/files/sfc.conf
index acf2e2f4..6621a212 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/files/sfc.conf
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/files/sfc.conf
@@ -1,6 +1,6 @@
[DEFAULT]
-service_plugins = odl-router,metering,networking_sfc.services.sfc.plugin.SfcPlugin,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin
+service_plugins = odl-router_v2,metering,trunk,networking_sfc.services.sfc.plugin.SfcPlugin,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin
[sfc]
drivers = odl
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-1.yml b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-1.yml
index 684f314c..13b4c571 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-1.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-1.yml
@@ -8,7 +8,7 @@
- name: install networking-odl
pip:
name: networking-odl
- virtualenv: /openstack/venvs/neutron-15.1.4
+ virtualenv: /openstack/venvs/neutron-{{ os_ver }}
- name: configure vsctl for dhcp agent
shell: |
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-2.yml b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-2.yml
index 82a26005..39b501db 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-2.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-agents-2.yml
@@ -70,7 +70,7 @@
- name: Set host OVS configurations
command: |
- /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig \
+ /openstack/venvs/neutron-{{ os_ver }}/bin/neutron-odl-ovs-hostconfig \
--datapath_type=system --bridge_mappings={{ contr_l2_mappings }}
when:
- inventory_hostname not in groups['nova_compute']
@@ -78,7 +78,7 @@
- name: Set host OVS configurations
command: |
- /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig \
+ /openstack/venvs/neutron-{{ os_ver }}/bin/neutron-odl-ovs-hostconfig \
--datapath_type=system --bridge_mappings={{ contr_l3_mappings }}
when:
- inventory_hostname not in groups['nova_compute']
@@ -86,14 +86,14 @@
- name: Set host OVS configurations
command: |
- /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig --datapath_type=system
+ /openstack/venvs/neutron-{{ os_ver }}/bin/neutron-odl-ovs-hostconfig --datapath_type=system
when:
- inventory_hostname in groups['nova_compute']
- odl_l3_agent == "Disable"
- name: Set host OVS configurations
command: |
- /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig
+ /openstack/venvs/neutron-{{ os_ver }}/bin/neutron-odl-ovs-hostconfig
--datapath_type=system --bridge_mappings={{ compu_l3_mappings }}
when:
- inventory_hostname in groups['nova_compute']
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-repos-1.yml b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-repos-1.yml
index 7b699a35..0eacde6e 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-repos-1.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-repos-1.yml
@@ -1,7 +1,7 @@
---
- name: copy download script
- copy:
- src: odl_pkg.sh
+ template:
+ src: odl_pkg.sh.j2
dest: /opt/odl_pkg.sh
mode: 0777
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-1.yml b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-1.yml
index 40149346..0269bb37 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-1.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-1.yml
@@ -8,12 +8,12 @@
- name: install networking-odl
pip:
name: networking-odl
- virtualenv: /openstack/venvs/neutron-15.1.4 # Todo: hardcode, need to modify
+ virtualenv: /openstack/venvs/neutron-{{ os_ver }}
- name: install networking-sfc
pip:
name: networking-sfc
- virtualenv: /openstack/venvs/neutron-15.1.4
+ virtualenv: /openstack/venvs/neutron-{{ os_ver }}
when: odl_sfc == "Enable"
- name: turn off neutron-server on control node
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-2.yml b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-2.yml
index d8bcf154..be45567a 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-2.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-2.yml
@@ -3,7 +3,7 @@
- name: configure odl l3 driver
shell: |
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins \
- odl-router,metering;
+ odl-router_v2,metering,trunk;
when: odl_l3_agent == "Enable"
- name: configure opendaylight -> ml2
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-3.yml b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-3.yml
index 0c11e36f..c4451ca2 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-3.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-servers-3.yml
@@ -2,7 +2,7 @@
- name: Perform a Neutron DB online upgrade
command: |
- /openstack/venvs/neutron-15.1.4/bin/neutron-db-manage
+ /openstack/venvs/neutron-{{ os_ver }}/bin/neutron-db-manage
--config-file /etc/neutron/neutron.conf
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini
upgrade --expand
@@ -11,7 +11,7 @@
- name: Perform a Neutron DB offline upgrade
command: |
- /openstack/venvs/neutron-15.1.4/bin/neutron-db-manage
+ /openstack/venvs/neutron-{{ os_ver }}/bin/neutron-db-manage
--config-file /etc/neutron/neutron.conf
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini
upgrade --contract
@@ -20,7 +20,7 @@
- name: SFC DB upgrade
command: |
- /openstack/venvs/neutron-15.1.4/bin/neutron-db-manage
+ /openstack/venvs/neutron-{{ os_ver }}/bin/neutron-db-manage
--subproject networking-sfc
upgrade head
become: "yes"
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-tacker-1.yml b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-tacker-1.yml
index c43b6dcc..8fd1109f 100644
--- a/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-tacker-1.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/tasks/control-tacker-1.yml
@@ -3,6 +3,5 @@
- name: upgrade networking-sfc
pip:
name: networking-sfc
- extra_args: -U
- virtualenv: /openstack/venvs/tacker-15.1.4
+ virtualenv: /openstack/venvs/tacker-{{ os_ver }}
when: odl_sfc == "Enable"
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/templates/odl_pkg.sh.j2 b/plugins/odl_sfc/roles/setup-odl-sfc/templates/odl_pkg.sh.j2
new file mode 100755
index 00000000..f8882b23
--- /dev/null
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/templates/odl_pkg.sh.j2
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+rm -rf /home/networking
+rm -rf /home/tmp
+
+mkdir -p /home/networking
+mkdir -p /home/tmp
+
+cd /home/networking
+
+git clone https://github.com/openstack/networking-odl.git -b stable/{{ os_name }}
+git clone https://github.com/openstack/networking-sfc.git -b stable/{{ os_name }}
+
+pip wheel /home/networking/networking-odl/ -w /home/tmp/
+pip wheel /home/networking/networking-sfc/ -w /home/tmp/
+
+cp /home/tmp/networking* /var/www/repo/os-releases/{{ os_ver }}/ubuntu-16.04-x86_64/
+
+sleep 30
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/templates/org.apache.karaf.features.cfg b/plugins/odl_sfc/roles/setup-odl-sfc/templates/org.apache.karaf.features.cfg
index afb7e6b5..05f7a7cd 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/templates/org.apache.karaf.features.cfg
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/templates/org.apache.karaf.features.cfg
@@ -37,9 +37,9 @@
# Comma separated list of features repositories to register by default
#
featuresRepositories = \
- mvn:org.opendaylight.integration/features-index/0.7.0/xml/features, \
- mvn:org.apache.karaf.features/framework/4.0.9/xml/features, \
- mvn:org.apache.karaf.features/standard/4.0.9/xml/features
+ mvn:org.opendaylight.integration/features-index/0.7.1/xml/features, \
+ mvn:org.apache.karaf.features/framework/4.0.10/xml/features, \
+ mvn:org.apache.karaf.features/standard/4.0.10/xml/features
#
# Comma separated list of features to install at startup
diff --git a/plugins/odl_sfc/roles/setup-odl-sfc/vars/main.yml b/plugins/odl_sfc/roles/setup-odl-sfc/vars/main.yml
index b3d71edb..014fc5b8 100755
--- a/plugins/odl_sfc/roles/setup-odl-sfc/vars/main.yml
+++ b/plugins/odl_sfc/roles/setup-odl-sfc/vars/main.yml
@@ -9,6 +9,9 @@
---
openstack_passwd_file: /etc/openstack_deploy/user_secrets.yml
+os_ver: 16.0.5
+os_name: pike
+
odl_username: admin
odl_password: admin
odl_api_port: 8181
@@ -18,8 +21,8 @@ sfc_plugins:
src: sfc.conf
dst: /opt/sfc.conf
-odl_pkg_url: karaf-0.7.0.tar.gz
-odl_pkg_name: karaf-0.7.0.tar.gz
+odl_pkg_url: karaf-0.7.1.tar.gz
+odl_pkg_name: karaf-0.7.1.tar.gz
odl_home: "/opt/opendaylight/"
odl_base_features:
- config
@@ -49,19 +52,9 @@ odl_extra_features:
odl_features: "{{ odl_base_features + odl_extra_features }}"
-sdn_package: http://artifacts.opnfv.org/compass4nfv/packages/master/sdn_package.tar.gz
-
-# yamllint disable rule:line-length
-networking_odl_url: https://launchpad.net/networking-odl/4.0-ocata/4.0.0/+download/networking-odl-4.0.0.tar.gz
-# yamllint enable rule:line-length
+sdn_package: http://artifacts.opnfv.org/compass4nfv/package/master/sdn_package.tar.gz
jdk8_pkg_name: jdk-8u51-linux-x64.tar.gz
jdk8_script_name: install_jdk8.tar
common_packages_noarch: []
-
-odl_pip: networking-odl-3.2.0
-
-networking_odl_version: 4.0.0
-
-networking_odl_pkg_name: networking-odl-3.2.0.tar.gz
diff --git a/plugins/odl_sfc/roles/sfc-pre-2/files/odl_sfc.patch b/plugins/odl_sfc/roles/sfc-pre-2/files/odl_sfc.patch
new file mode 100644
index 00000000..9e25214a
--- /dev/null
+++ b/plugins/odl_sfc/roles/sfc-pre-2/files/odl_sfc.patch
@@ -0,0 +1,90 @@
+diff --git a/defaults/main.yml b/defaults/main.yml
+index fd6fc37..3ae4bce 100644
+--- a/defaults/main.yml
++++ b/defaults/main.yml
+@@ -381,3 +381,9 @@ dragonflow_ex_peer_patch_port: patch-int
+ dragonflow_int_peer_patch_port: patch-ex
+ dragonflow_external_network_bridge: br-ex
+ dragonflow_publisher_bind_address: "*"
++
++# Install Openvswitch without NSH support
++ovs_nsh_support: True
++#
++# # Set higher priority to mardim PPA when ovs_nsh_support is True
++ovs_nsh_apt_pinned_packages: [{ package: "*", release: "LP-PPA-mardim-mardim-ppa"}]
+diff --git a/meta/main.yml b/meta/main.yml
+index 418b4a9..7a6739a 100644
+--- a/meta/main.yml
++++ b/meta/main.yml
+@@ -39,7 +39,10 @@ galaxy_info:
+ - openstack
+ dependencies:
+ - pip_install
+- - apt_package_pinning
++ - role: apt_package_pinning
++ apt_pinned_packages: "{{ ovs_nsh_support | ternary(ovs_nsh_apt_pinned_packages, omit) }}"
++ when:
++ - ansible_pkg_mgr == 'apt'
+ - galera_client
+ - openstack_openrc
+ - role: etcd
+diff --git a/tasks/neutron_pre_install.yml b/tasks/neutron_pre_install.yml
+index 59fd87f..1162a2b 100644
+--- a/tasks/neutron_pre_install.yml
++++ b/tasks/neutron_pre_install.yml
+@@ -79,3 +79,12 @@
+ mode: "0440"
+ owner: "root"
+ group: "root"
++
++- name: add ovs-nsh repo
++ apt_repository:
++ repo: "ppa:mardim/mardim-ppa"
++ update_cache: True
++ state: present
++ when:
++ - ansible_pkg_mgr == 'apt'
++ - ovs_nsh_support | bool
+diff --git a/vars/main.yml b/vars/main.yml
+index dec0e36..afdff3f 100644
+--- a/vars/main.yml
++++ b/vars/main.yml
+@@ -27,8 +27,12 @@ neutron_package_list: |-
+ {% if (neutron_services['neutron-openvswitch-agent']['group'] in group_names and neutron_services['neutron-openvswitch-agent'].service_en | bool)
+ or (neutron_services['dragonflow-controller-agent']['group'] in group_names and neutron_services['dragonflow-controller-agent'].service_en | bool)
+ or (neutron_services['dragonflow-l3-agent']['group'] in group_names and neutron_services['dragonflow-l3-agent'].service_en | bool) %}
++ {% if (ovs_nsh_support and ansible_pkg_mgr in ['apt', 'zypper']) %}
++ {% set _ = packages.extend(neutron_ovs_nsh_required_packages) %}
++ {% else %}
+ {% set _ = packages.extend(neutron_ovs_distro_packages) %}
+ {% endif %}
++ {% endif %}
+ {% if neutron_services['neutron-linuxbridge-agent']['group'] in group_names and neutron_services['neutron-linuxbridge-agent'].service_en | bool %}
+ {% set _ = packages.extend(neutron_lxb_distro_packages) %}
+ {% endif %}
+@@ -50,6 +54,8 @@ calico_felix_bin: /usr/local/bin/calico-felix
+ ### Python code details
+ ###
+
++neutron_ovs_nsh_distro_packages: []
++
+ neutron_requires_pip_packages:
+ - virtualenv
+ - virtualenv-tools
+diff --git a/vars/ubuntu-16.04.yml b/vars/ubuntu-16.04.yml
+index eb52ebf..a2c6275 100644
+--- a/vars/ubuntu-16.04.yml
++++ b/vars/ubuntu-16.04.yml
+@@ -25,6 +25,12 @@ neutron_vpnaas_service_provider: VPN:strongswan:neutron_vpnaas.services.vpn.serv
+ ## APT Cache options
+ cache_timeout: 600
+
++neutron_ovs_nsh_required_packages:
++ - openvswitch-datapath-dkms
++ - openvswitch-common
++ - openvswitch-switch
++ - python-openvswitch
++
+ neutron_distro_packages:
+ - conntrack
+ - dnsmasq-base
diff --git a/plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml b/plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml
index a80a81ef..039d5460 100644
--- a/plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml
+++ b/plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml
@@ -7,28 +7,14 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
---
-- name: add ovs package in neutron
- lineinfile:
- dest: /etc/ansible/roles/os_neutron/vars/ubuntu-16.04.yml
- insertbefore: 'openvswitch-common'
- line: ' - openvswitch-datapath-dkms'
-- name: add ovs package in neutron
- lineinfile:
- dest: /etc/ansible/roles/os_neutron/vars/ubuntu-16.04.yml
- insertafter: 'openvswitch-switch'
- line: ' - python-openvswitch'
+- name: copy patch file
+ copy:
+ src: odl_sfc.patch
+ dest: /opt/odl_sfc.patch
-- name: modify ovs installation in neutron
- blockinfile:
- dest: /etc/ansible/roles/os_neutron/tasks/neutron_install.yml
- insertafter: '^# limitations'
- block: |
- - name: add ovs-nsh repo
- apt_repository:
- repo: "ppa:mardim/mardim-ppa"
- update_cache: True
- state: present
- when:
- - inventory_hostname in groups['neutron_openvswitch_agent']
- - inventory_hostname not in groups['nova_compute']
+- name: apply odl_sfc patch to os_neutron
+ shell: |
+ cd /etc/ansible/roles/os_neutron;
+ patch -p1 < /opt/odl_sfc.patch;
+ cd -
diff --git a/plugins/stor4nfv/plugin.desc b/plugins/stor4nfv/plugin.desc
new file mode 100644
index 00000000..ae589a60
--- /dev/null
+++ b/plugins/stor4nfv/plugin.desc
@@ -0,0 +1,45 @@
+# Plugin for Stor4nfv service for Compass4nfv.
+# Stor4NFV provides a storage solution based on Ceph and
+# OpenSDS, and focuses on the optimization for storage
+# intensive use cases of NFV, like I/O performance improvements.
+#
+# More details can be found in the development document.
+# ##############################################################
+---
+plugin:
+ # plugin name,it is also as the switch to enable/disable plugin in scenario
+ # files
+ name: stor4nfv
+
+ description: provide a storage solution based on Ceph and OpenSDS
+
+ maintainers:
+
+ # host os type: ubuntu/centos
+ os_version: ubuntu
+
+ # true: this plugin is deployed separately on a new node
+ # false: this plugin is deployed on controller or compute node
+ independent_hosts: false
+
+ # artifact: package download url for this plugin
+ artifacts:
+ url:
+
+ # orchestration
+ # A plugin can have mutiple components, each component may need to be
+ # installed on different inventory or have its own configuration.
+ # due to Compass4nfv currently only supports ansible, so each component
+ # of the installation and configuration script need to be use ansible.
+ # cm : congfiguration management tool : only ansible support
+ # role: each component corresponds to ansible script that locates in the same
+ # directory as plugin.desc.
+ # phrase:
+ # inventory:
+ orchestration:
+ cm: ansible
+ roles:
+ - role: stor4nfv
+ phrase: post_k8s
+ inventory:
+ - localhost
diff --git a/plugins/stor4nfv/roles/stor4nfv/files/configure_vars.sh b/plugins/stor4nfv/roles/stor4nfv/files/configure_vars.sh
new file mode 100644
index 00000000..878f1542
--- /dev/null
+++ b/plugins/stor4nfv/roles/stor4nfv/files/configure_vars.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+# #############################################################################
+# Copyright (c) 2018 Intel Corp.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+# #############################################################################
+
+cd $HOME/gopath/src/github.com/stor4nfv/stor4nfv/ci/ansible
+
+sed -i 's/^workplace.*/workplace: \/root/g' group_vars/common.yml
+
+sed -i 's/^enabled_backend.*/enabled_backend: ceph/g' group_vars/osdsdock.yml
+
+sed -i 's/^ceph_pool_name.*/ceph_pool_name: "rbd"/g' group_vars/osdsdock.yml
+
+sed -i 's/^ceph_origin.*/ceph_origin: repository/g' group_vars/ceph/all.yml
+
+sed -i 's/^ceph_repository.*/ceph_repository: community/g' group_vars/ceph/all.yml
+
+sed -i 's/^ceph_stable_release.*/ceph_stable_release: luminous/g' group_vars/ceph/all.yml
+
+sed -i 's|^public_network.*|public_network: '"$1"'|g' group_vars/ceph/all.yml
+
+sed -i 's|^cluster_network.*|cluster_network: '"$2"'|g' group_vars/ceph/all.yml
+
+sed -i 's/^monitor_interface.*/monitor_interface: eth0/g' group_vars/ceph/all.yml
+
+sed -i 's/^devices:.*/devices: [\/dev\/loop0, \/dev\/loop1, \/dev\/loop2]/g' group_vars/ceph/osds.yml
+
+sed -i 's/^osd_scenario.*/osd_scenario: collocated/g' group_vars/ceph/osds.yml
+
+sed -i 's/^db_endpoint.*/db_endpoint: localhost:62379,localhost:62380/g' group_vars/osdsdb.yml
+
+sed -i 's/^etcd_port.*/etcd_port: 62379/g' group_vars/osdsdb.yml
+
+sed -i 's/^etcd_peer_port.*/etcd_peer_port: 62380/g' group_vars/osdsdb.yml
diff --git a/plugins/stor4nfv/roles/stor4nfv/files/install_ansible.sh b/plugins/stor4nfv/roles/stor4nfv/files/install_ansible.sh
new file mode 100644
index 00000000..b4a3a30a
--- /dev/null
+++ b/plugins/stor4nfv/roles/stor4nfv/files/install_ansible.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# #############################################################################
+# Copyright (c) 2018 Intel Corp.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+# #############################################################################
+
+add-apt-repository ppa:ansible/ansible
+
+apt-get update
+apt-get install -y ansible
+sleep 5
+
+ansible --version
+
diff --git a/plugins/stor4nfv/roles/stor4nfv/tasks/main.yml b/plugins/stor4nfv/roles/stor4nfv/tasks/main.yml
new file mode 100644
index 00000000..353282f9
--- /dev/null
+++ b/plugins/stor4nfv/roles/stor4nfv/tasks/main.yml
@@ -0,0 +1,13 @@
+# #############################################################################
+# Copyright (c) 2018 Intel Corp.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+# #############################################################################
+---
+- include: opensds.yml
+ when:
+ - ansible_distribution == 'Ubuntu'
+ - stor4nfv is defined and stor4nfv == "Enable"
diff --git a/plugins/stor4nfv/roles/stor4nfv/tasks/opensds.yml b/plugins/stor4nfv/roles/stor4nfv/tasks/opensds.yml
new file mode 100644
index 00000000..afd65bc7
--- /dev/null
+++ b/plugins/stor4nfv/roles/stor4nfv/tasks/opensds.yml
@@ -0,0 +1,84 @@
+# #############################################################################
+# Copyright (c) 2018 Intel Corp.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+# #############################################################################
+---
+
+- name: install prerequisites package
+ apt:
+ name: "{{ item }}"
+ state: present
+ with_items:
+ - make
+ - gcc
+
+- name: copy install_ansible script
+ remote_user: root
+ copy:
+ src: install_ansible.sh
+ dest: /opt/install_ansible.sh
+ mode: 0777
+
+- name: install ansible
+ command: su -s /bin/sh -c "/opt/install_ansible.sh"
+
+- name: install ceph-ansible code
+ remote_user: root
+ shell: |
+ cd /opt;
+ git clone https://github.com/ceph/ceph-ansible.git
+
+- name: fetch stor4nfv source code
+ remote_user: root
+ shell: |
+ mkdir -p $HOME/gopath/src/github.com/stor4nfv && cd $HOME/gopath/src/github.com/stor4nfv;
+ git clone https://gerrit.opnfv.org/gerrit/stor4nfv.git
+
+- name: copy configure_vars script
+ remote_user: root
+ copy:
+ src: configure_vars.sh
+ dest: /opt/configure_vars.sh
+ mode: 0777
+
+- name: configure variables for ceph, opensds
+ remote_user: root
+ shell: |
+ cd /opt;
+ ./configure_vars.sh {{ mgmt_cidr }} {{ external_cidr }}
+
+- name: render ceph inventory
+ remote_user: root
+ template:
+ src: ceph.hosts.j2
+ dest: $HOME/gopath/src/github.com/stor4nfv/stor4nfv/ci/ansible/group_vars/ceph/ceph.hosts
+
+- name: render opensds inventory
+ remote_user: root
+ template:
+ src: opensds.hosts.j2
+ dest: $HOME/gopath/src/github.com/stor4nfv/stor4nfv/ci/ansible/local.hosts
+
+- name: force to run the second etcd cluster
+ remote_user: root
+ lineinfile:
+ dest: $HOME/gopath/src/github.com/stor4nfv/stor4nfv/ci/ansible/roles/osdsdb/scenarios/etcd.yml
+ state: absent
+ regexp: 'when: service_etcd_status.rc != 0'
+
+- name: run playbook
+ remote_user: root
+ shell: |
+ cd $HOME/gopath/src/github.com/stor4nfv/stor4nfv/ci/ansible;
+ ansible-playbook site.yml -i local.hosts | tee /var/log/stor4nfv.log
+ register: stor4nfv_result
+
+- name: export opensds endpoint
+ remote_user: root
+ shell: |
+ export OPENSDS_ENDPOINT=http://127.0.0.1:50040
+ when: stor4nfv_result|succeeded
diff --git a/plugins/stor4nfv/roles/stor4nfv/templates/ceph.hosts.j2 b/plugins/stor4nfv/roles/stor4nfv/templates/ceph.hosts.j2
new file mode 100644
index 00000000..fda313d4
--- /dev/null
+++ b/plugins/stor4nfv/roles/stor4nfv/templates/ceph.hosts.j2
@@ -0,0 +1,14 @@
+[mons]
+{% for controller in hostvars[inventory_hostname]['groups']['kube_master'] %}
+{{ controller }} ansible_ssh_host={{ hostvars[controller]['ansible_ssh_host'] }}
+{% endfor %}
+
+[osds]
+{% for controller in hostvars[inventory_hostname]['groups']['storage_node'] %}
+{{ controller }} ansible_ssh_host={{ hostvars[controller]['ansible_ssh_host'] }}
+{% endfor %}
+
+[mgrs]
+{% for controller in hostvars[inventory_hostname]['groups']['kube_master'] %}
+{{ controller }} ansible_ssh_host={{ hostvars[controller]['ansible_ssh_host'] }}
+{% endfor %}
diff --git a/plugins/stor4nfv/roles/stor4nfv/templates/opensds.hosts.j2 b/plugins/stor4nfv/roles/stor4nfv/templates/opensds.hosts.j2
new file mode 100644
index 00000000..97068b90
--- /dev/null
+++ b/plugins/stor4nfv/roles/stor4nfv/templates/opensds.hosts.j2
@@ -0,0 +1,9 @@
+[controllers]
+{% for controller in hostvars[inventory_hostname]['groups']['storage_master'] %}
+{{ controller }} ansible_ssh_host={{ hostvars[controller]['ansible_ssh_host'] }}
+{% endfor %}
+
+[docks]
+{% for dock in hostvars[inventory_hostname]['groups']['storage_master'] %}
+{{ dock }} ansible_ssh_host={{ hostvars[dock]['ansible_ssh_host'] }}
+{% endfor %}