commit 0205f1ba53b38494235ade8a19fbbd266f4fbd4c Author: marco Date: Fri Jun 10 10:40:50 2016 +0200 Midonet salt formula first version. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..ad751a7 --- /dev/null +++ b/README.rst @@ -0,0 +1,4 @@ +======= +Midonet +======= + diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..3b04cfb --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.2 diff --git a/metadata/service/compute/cluster.yml b/metadata/service/compute/cluster.yml new file mode 100644 index 0000000..b601780 --- /dev/null +++ b/metadata/service/compute/cluster.yml @@ -0,0 +1,19 @@ +applications: +- midonet +classes: +- service.midonet.support +parameters: + _param: + midonet_version: v5.0 + midonet: + compute: + version: ${_param:midonet_version} + enterprise: + enabled: true + enabled: true + zookeeper: + members: + - host: ${_param:cluster_node01_address} + - host: ${_param:cluster_node02_address} + - host: ${_param:cluster_node03_address} + template: medium \ No newline at end of file diff --git a/metadata/service/control/analytics.yml b/metadata/service/control/analytics.yml new file mode 100644 index 0000000..06ac4ba --- /dev/null +++ b/metadata/service/control/analytics.yml @@ -0,0 +1,14 @@ +applications: +- midonet +classes: +- service.midonet.support +parameters: + _param: + midonet_version: v5.0 + midonet: + analytics: + version: ${_param:midonet_version} + enterprise: + enabled: true + enabled: true + host: ${_param:single_address} \ No newline at end of file diff --git a/metadata/service/control/cluster.yml b/metadata/service/control/cluster.yml new file mode 100644 index 0000000..1f25503 --- /dev/null +++ b/metadata/service/control/cluster.yml @@ -0,0 +1,37 @@ +applications: +- midonet +classes: +- service.midonet.support +parameters: + _param: + midonet_version: v5.0 + midonet: + control: + version: ${_param:midonet_version} + enterprise: + enabled: true + enabled: true + host: ${_param:cluster_vip_address} + nova: + control: + host: ${_param:cluster_vip_address} + database: + members: + - host: ${_param:cluster_node01_address} + port: 9160 + - host: ${_param:cluster_node02_address} + port: 9160 + - host: ${_param:cluster_node03_address} + port: 9160 + zookeeper: + members: + - host: ${_param:cluster_node01_address} + - host: ${_param:cluster_node02_address} + - host: ${_param:cluster_node03_address} + identity: + user: midonet + password: ${_param:keystone_midonet_password} + host: ${_param:cluster_vip_address} + admin: + token: ${_param:keystone_service_token} + password: ${_param:keystone_admin_password} \ No newline at end of file diff --git a/metadata/service/control/single.yml b/metadata/service/control/single.yml new file mode 100644 index 0000000..e69de29 diff --git a/metadata/service/control/web.yml b/metadata/service/control/web.yml new file mode 100644 index 0000000..1581330 --- /dev/null +++ b/metadata/service/control/web.yml @@ -0,0 +1,15 @@ +applications: +- midonet +classes: +- service.midonet.support +parameters: + _param: + midonet_version: v5.0 + midonet: + web: + version: ${_param:midonet_version} + enabled: true + api: + host: ${_param:cluster_vip_address} + analytics: + host: ${_param:midonet_analytics_address} \ No newline at end of file diff --git a/metadata/service/gateway/cluster.yml b/metadata/service/gateway/cluster.yml new file mode 100644 index 0000000..40926e7 --- /dev/null +++ b/metadata/service/gateway/cluster.yml @@ -0,0 +1,19 @@ +applications: +- midonet +classes: +- service.midonet.support +parameters: + _param: + midonet_version: v5.0 + midonet: + gateway: + version: ${_param:midonet_version} + enterprise: + enabled: true + enabled: true + zookeeper: + members: + - host: ${_param:cluster_node01_address} + - host: ${_param:cluster_node02_address} + - host: ${_param:cluster_node03_address} + template: medium \ No newline at end of file diff --git a/metadata/service/support.yml b/metadata/service/support.yml new file mode 100644 index 0000000..3017314 --- /dev/null +++ b/metadata/service/support.yml @@ -0,0 +1,11 @@ +parameters: + midonet: + _support: + collectd: + enabled: false + heka: + enabled: false + sensu: + enabled: true + sphinx: + enabled: true diff --git a/midonet/analytics.sls b/midonet/analytics.sls new file mode 100644 index 0000000..d755e12 --- /dev/null +++ b/midonet/analytics.sls @@ -0,0 +1,22 @@ +{%- from "midonet/map.jinja" import analytics with context %} +{%- if analytics.enabled %} + +midonet_analytics_packages: + pkg.installed: + - names: {{ analytics.pkgs }} + +/etc/midonet/analytics_settings.conf: + file.managed: + - source: salt://midonet/files/{{ analytics.version }}/analytics_settings.conf + - template: jinja + - require: + - pkg: midonet_analytics_packages + - makedirs: true + +midonet_analytics_setting: + cmd.run: + - name: mn-conf set -t default < /etc/midonet/analytics_settings.conf + - require: + - file: /etc/midonet/analytics_settings.conf + +{%- endif %} \ No newline at end of file diff --git a/midonet/compute.sls b/midonet/compute.sls new file mode 100644 index 0000000..f18444d --- /dev/null +++ b/midonet/compute.sls @@ -0,0 +1,43 @@ +{%- from "midonet/map.jinja" import compute with context %} +{%- if compute.enabled %} + +midonet_compute_packages: + pkg.installed: + - names: {{ compute.pkgs }} + +/etc/midolman/midolman.conf: + file.managed: + - source: salt://midonet/files/{{ compute.version }}/midolman.conf.compute + - template: jinja + - require: + - pkg: midonet_compute_packages + +/etc/midolman/midolman-env.sh: + file.managed: + - source: salt://midonet/files/{{ compute.version }}/midolman-env.sh.compute + - template: jinja + - require: + - pkg: midonet_compute_packages + +midonet_configure_template: + cmd.run: + - name: mn-conf template-set -h local -t agent-compute-{{ compute.template }} + - require: + - file: /etc/midolman/midolman.conf + +midonet_compute_services: + service.running: + - names: {{ compute.services }} + - enable: true + - watch: + - file: /etc/midolman/midolman.conf + +{%- if compute.enterprise.enabled %} + +midonet_enterprise_packages: + pkg.installed: + - names: + - midonet-jmxscraper + +{%- endif %} +{%- endif %} \ No newline at end of file diff --git a/midonet/control.sls b/midonet/control.sls new file mode 100644 index 0000000..9f0ff05 --- /dev/null +++ b/midonet/control.sls @@ -0,0 +1,50 @@ +{%- from "midonet/map.jinja" import control with context %} +{%- if control.enabled %} + +midonet_control_packages: + pkg.installed: + - names: {{ control.pkgs }} + +/etc/midonet/midonet.conf: + file.managed: + - source: salt://midonet/files/{{ control.version }}/midonet.conf + - template: jinja + - require: + - pkg: midonet_control_packages + +/etc/midonet/default.json: + file.managed: + - source: salt://midonet/files/{{ control.version }}/default.json + - template: jinja + - require: + - pkg: midonet_control_packages + +midonet_initial_setting: + cmd.run: + - name: cat /etc/midonet/default.json | mn-conf set -t default + - require: + - file: /etc/midonet/default.json + +/root/.midonetrc: + file.managed: + - source: salt://midonet/files/{{ control.version }}/midonetrc + - template: jinja + - require: + - pkg: midonet_control_packages + +midonet_control_services: + service.running: + - names: {{ control.services }} + - enable: true + - watch: + - file: /etc/midonet/midonet.conf + +{%- if control.enterprise.enabled %} + +midonet_enterprise_packages: + pkg.installed: + - names: + - midonet-cluster-mem + +{%- endif %} +{%- endif %} \ No newline at end of file diff --git a/midonet/files/entrypoint.sh.compute b/midonet/files/entrypoint.sh.compute new file mode 100644 index 0000000..3850017 --- /dev/null +++ b/midonet/files/entrypoint.sh.compute @@ -0,0 +1,17 @@ +{%- from "midonet/map.jinja" import compute with context %} +#!/bin/bash -e + +cat /srv/salt/pillar/midonet-compute.sls | envsubst > /tmp/midonet-computer.sls +mv /tmp/midonet-compute.sls /srv/salt/pillar/midonet-compute.sls + +salt-call --local --retcode-passthrough state.highstate + +{% for service in compute.services %} +service {{ service }} stop || true +{% endfor %} + +/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.library.path=/lib:/usr/lib -cp /usr/share/midolman/midolman.jar -XX:+AggressiveOpts -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms$MAX_HEAP_SIZE -Xmx$MAX_HEAP_SIZE -XX:HeapDumpPath=/var/log/midolman/ -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill;-3;%p" -XX:-UseBiasedLocking -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:InitiatingHeapOccupancyPercent=70 -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=8 -XX:+UseTLAB -XX:+ResizeTLAB -XX:TLABSize=2m -XX:PretenureSizeThreshold=2m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintClassHistogram -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:/var/log/midolman/gc-20160615_101957.log -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only= -Dcom.sun.management.jmxremote.port=7200 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=$HOSTNAME -Dmidolman.log.dir=/var/log/midolman/ -Dlogback.configurationFile=/etc/midolman/logback.xml org.midonet.midolman.Midolman -c /etc/midolman/midolman.conf + +{#- +vim: syntax=jinja +-#} \ No newline at end of file diff --git a/midonet/files/entrypoint.sh.control b/midonet/files/entrypoint.sh.control new file mode 100644 index 0000000..0eba9ae --- /dev/null +++ b/midonet/files/entrypoint.sh.control @@ -0,0 +1,17 @@ +{%- from "midonet/map.jinja" import control with context %} +#!/bin/bash -e + +cat /srv/salt/pillar/midonet-control.sls | envsubst > /tmp/midonet-control.sls +mv /tmp/midonet-control.sls /srv/salt/pillar/midonet-control.sls + +salt-call --local --retcode-passthrough state.highstate + +{% for service in control.services %} +service {{ service }} stop || true +{% endfor %} + +/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -Djava.library.path=/lib:/usr/lib -cp /etc/midonet-cluster:/usr/share/midonet-cluster/midonet-cluster.jar:/usr/share/midonet-cluster/addons/* -XX:+AggressiveOpts -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms$MAX_HEAP_SIZE -Xmx$MAX_HEAP_SIZE -Xmn$HEAP_NEWSIZE -XX:HeapDumpPath=/var/log/midonet-cluster/ -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill;-3;%p" -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=6 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseTLAB -XX:+ResizeTLAB -XX:TLABSize=2m -XX:PretenureSizeThreshold=2m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only= -Dcom.sun.management.jmxremote.port=7201 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=$HOSTNAME -Dmidonet-cluster.log.dir=/var/log/midonet-cluster/ -Dconfig.file= -Dlogback.configurationFile=/etc/midonet-cluster/logback.xml org.midonet.cluster.ClusterNode /etc/midonet/midonet.conf + +{#- +vim: syntax=jinja +-#} \ No newline at end of file diff --git a/midonet/files/entrypoint.sh.gateway b/midonet/files/entrypoint.sh.gateway new file mode 100644 index 0000000..42fc02d --- /dev/null +++ b/midonet/files/entrypoint.sh.gateway @@ -0,0 +1,17 @@ +{%- from "midonet/map.jinja" import gateway with context %} +#!/bin/bash -e + +cat /srv/salt/pillar/midonet-gateway.sls | envsubst > /tmp/midonet-gateway.sls +mv /tmp/midonet-gateway.sls /srv/salt/pillar/midonet-gateway.sls + +salt-call --local --retcode-passthrough state.highstate + +{% for service in gateway.services %} +service {{ service }} stop || true +{% endfor %} + +/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.library.path=/lib:/usr/lib -cp /usr/share/midolman/midolman.jar -XX:+AggressiveOpts -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms$MAX_HEAP_SIZE -Xmx$MAX_HEAP_SIZE -XX:HeapDumpPath=/var/log/midolman/ -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError="kill;-3;%p" -XX:-UseBiasedLocking -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:InitiatingHeapOccupancyPercent=70 -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=8 -XX:+UseTLAB -XX:+ResizeTLAB -XX:TLABSize=2m -XX:PretenureSizeThreshold=2m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintClassHistogram -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:/var/log/midolman/gc-20160615_101957.log -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only= -Dcom.sun.management.jmxremote.port=7200 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=$HOSTNAME -Dmidolman.log.dir=/var/log/midolman/ -Dlogback.configurationFile=/etc/midolman/logback.xml org.midonet.midolman.Midolman -c /etc/midolman/midolman.conf + +{#- +vim: syntax=jinja +-#} \ No newline at end of file diff --git a/midonet/files/entrypoint.sh.web b/midonet/files/entrypoint.sh.web new file mode 100644 index 0000000..00babb9 --- /dev/null +++ b/midonet/files/entrypoint.sh.web @@ -0,0 +1,17 @@ +{%- from "midonet/map.jinja" import web with context %} +#!/bin/bash -e + +cat /srv/salt/pillar/midonet-web.sls | envsubst > /tmp/midonet-web.sls +mv /tmp/midonet-web.sls /srv/salt/pillar/midonet-web.sls + +salt-call --local --retcode-passthrough state.highstate + +{% for service in web.services %} +service {{ service }} stop || true +{% endfor %} + +/usr/sbin/apache2 -k start + +{#- +vim: syntax=jinja +-#} \ No newline at end of file diff --git a/midonet/files/v5.0/analytics_settings.conf b/midonet/files/v5.0/analytics_settings.conf new file mode 100644 index 0000000..bc7c35d --- /dev/null +++ b/midonet/files/v5.0/analytics_settings.conf @@ -0,0 +1,17 @@ +{%- from "midonet/map.jinja" import analytics with context %} +clio.enabled : true +clio.service.udp_port : 5001 +clio.service.encoding : "binary" +clio.target.udp_endpoint : "{{ analytics.host }}:5000" +clio.data.fields : [ "cookie", "devices", "host_uuid", "in_port", "in_tenant", "out_ports", "out_tenant", "match_eth_src", "match_eth_dst", "match_ethertype", "match_network_dst", "match_network_src", "match_network_proto", "match_src_port", "match_dst_port", "action_drop", "action_arp_sip", "action_arp_tip", "action_arp_op", "rules", "sim_result", "final_eth_src", "final_eth_dst", "final_net_src", "final_net_dst", "final_transport_src", "final_transport_dst", "timestamp", "type" ] +calliope.enabled : true +calliope.service.ws_port : 8080 +calliope.auth.ssl.enabled : true +jmxscraper.enabled : true +jmxscraper.target.udp_endpoint : "{{ analytics.host }}:5000" +mem_cluster.flow_tracing.enabled : true +mem_cluster.flow_tracing.service.ws_port : 8460 +mem_cluster.flow_tracing.auth.ssl.enabled : true +agent.flow_history.enabled : true +agent.flow_history.encoding : "binary" +agent.flow_history.udp_endpoint : "{{ analytics.host }}:5001" \ No newline at end of file diff --git a/midonet/files/v5.0/client.js b/midonet/files/v5.0/client.js new file mode 100644 index 0000000..fc6e101 --- /dev/null +++ b/midonet/files/v5.0/client.js @@ -0,0 +1,14 @@ +{%- from "midonet/map.jinja" import web with context %} +{ + "api_host": "http://{{ web.api.host }}:8181", + "login_host": "http://{{ web.api.host }}:8181", + "trace_api_host": "http://{{ web.api.host }}:8181", + "traces_ws_url": "wss://{{ web.analytics.host }}:8460/trace", + "api_namespace": "midonet-api", + "api_version": "5.0", + "api_token": false, + "agent_config_api_namespace": "conf", + "analytics_ws_api_url": "wss://{{ web.analytics.host }}:8080/analytics", + "poll_enabled": true, + "login_animation_enabled": true +} \ No newline at end of file diff --git a/midonet/files/v5.0/default.json b/midonet/files/v5.0/default.json new file mode 100644 index 0000000..9b6aac2 --- /dev/null +++ b/midonet/files/v5.0/default.json @@ -0,0 +1,24 @@ +{%- from "midonet/map.jinja" import control with context %} +zookeeper { + zookeeper_hosts = "{% for member in control.zookeeper.members %}{{ member.host }}:2181{% if not loop.last %},{% endif %}{% endfor %}" +} +cassandra { + servers = "{% for member in control.database.members %}{{ member.host }}{% if not loop.last %},{% endif %}{% endfor %}" + replication_factor : 3 +} +cluster.auth { + provider_class = "org.midonet.cluster.auth.keystone.KeystoneService" + admin_role = "admin" + keystone.tenant_name = "admin" + keystone.admin_token = "{{ control.identity.admin.token }}" + keystone.host = {{ control.identity.host }} + keystone.port = 35357 +} +agent { + openstack { + metadata { + nova_metadata_url : "http://{{ control.nova.control.host }}:8775" + enabled : true + } + } +} \ No newline at end of file diff --git a/midonet/files/v5.0/midolman-env.sh.compute b/midonet/files/v5.0/midolman-env.sh.compute new file mode 100644 index 0000000..c3c15a5 --- /dev/null +++ b/midonet/files/v5.0/midolman-env.sh.compute @@ -0,0 +1,116 @@ +{%- from "midonet/map.jinja" import compute with context %} +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +MIDO_HOME=/usr/share/midolman +MIDO_CFG=/etc/midolman +MIDO_LOG_DIR=/var/log/midolman/ +MIDO_DEBUG_PORT=8001 +JMX_PORT="7200" +MIDO_CFG_FILE=midolman.conf +QUAGGA_DIR=/var/run/quagga +# setting this option will make the agent not run under the watchdog +#WATCHDOG_DISABLE= +WATCHDOG_TIMEOUT=10 + +# Amount of memory to allocate for the JVM heap. +MAX_HEAP_SIZE="{%-if compute.template == 'medium' %}2048{%- else %}4096{%- endif %}M" + +# Here we create the arguments that will get passed to the jvm when +# starting midolman. + +# enable assertions. disabling this in production will give a modest +# performance benefit (around 5%). +# JVM_OPTS="$JVM_OPTS -ea" +JVM_OPTS="$JVM_OPTS -XX:+AggressiveOpts" + +# enable thread priorities, primarily so we can give periodic tasks +# a lower priority to avoid interfering with client workload +JVM_OPTS="$JVM_OPTS -XX:+UseThreadPriorities" +# allows lowering thread priority without being root. see +# http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workaround.html +JVM_OPTS="$JVM_OPTS -XX:ThreadPriorityPolicy=42" + +# min and max heap sizes should be set to the same value to avoid +# stop-the-world GC pauses during resize, and so that we can lock the +# heap in memory on startup to prevent any of it from being swapped +# out. +JVM_OPTS="$JVM_OPTS -Xms${MAX_HEAP_SIZE}" +JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}" +JVM_OPTS="$JVM_OPTS -XX:HeapDumpPath=/var/log/midolman/" +JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError" +JVM_OPTS="$JVM_OPTS -XX:OnOutOfMemoryError=\"kill;-3;%p\"" + +# Do not use biased locking +JVM_OPTS="$JVM_OPTS -XX:-UseBiasedLocking" + +# GC tuning options +JVM_OPTS="$JVM_OPTS -XX:+UseG1GC" +JVM_OPTS="$JVM_OPTS -XX:MaxGCPauseMillis=500" +JVM_OPTS="$JVM_OPTS -XX:InitiatingHeapOccupancyPercent=70" +JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=8" +JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=8" +JVM_OPTS="$JVM_OPTS -XX:+UseTLAB" +JVM_OPTS="$JVM_OPTS -XX:+ResizeTLAB" +JVM_OPTS="$JVM_OPTS -XX:TLABSize=2m" +JVM_OPTS="$JVM_OPTS -XX:PretenureSizeThreshold=2m" + +# GC logging options +JVM_OPTS="$JVM_OPTS -XX:+PrintGCDetails" +JVM_OPTS="$JVM_OPTS -XX:+PrintGCTimeStamps" +JVM_OPTS="$JVM_OPTS -XX:+PrintClassHistogram" +JVM_OPTS="$JVM_OPTS -XX:+PrintTenuringDistribution" +JVM_OPTS="$JVM_OPTS -XX:+PrintGCApplicationStoppedTime" +JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation" +JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10" +JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M" +JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/midolman/gc-`date +%Y%m%d_%H%M%S`.log" + +# uncomment to have Midolman JVM listen for remote debuggers/profilers on port 1414 +# JVM_OPTS="$JVM_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414" + +# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See +# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version: +# comment out this entry to enable IPv6 support). +# JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=true" + +# uncomment to disable JMX +# JMXDISABLE=true + +# jmx: metrics and administration interface +# +# add this if you're having trouble connecting: +# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=" +# +# see +# http://blogs.sun.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole +# for more on configuring JMX through firewalls, etc. (Short version: +# get it working with no firewall first.) +if [ "x$JMXDISABLE" = "x" ] ; then + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false" + HOSTNAME=`hostname` + JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=$HOSTNAME" +fi + +if [ "$MIDOLMAN_HPROF" = "1" ] ; then + DATE=$(date +'%H%M%S') + HPROF_FILENAME=${HPROF_FILENAME:-/tmp/midolman-$DATE.hprof} + JVM_OPTS="$JVM_OPTS -agentlib:hprof=cpu=samples,depth=100,interval=1,lineno=y,thread=y,file=$HPROF_FILENAME" +fi \ No newline at end of file diff --git a/midonet/files/v5.0/midolman-env.sh.gateway b/midonet/files/v5.0/midolman-env.sh.gateway new file mode 100644 index 0000000..1b6b431 --- /dev/null +++ b/midonet/files/v5.0/midolman-env.sh.gateway @@ -0,0 +1,116 @@ +{%- from "midonet/map.jinja" import gateway with context %} +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +MIDO_HOME=/usr/share/midolman +MIDO_CFG=/etc/midolman +MIDO_LOG_DIR=/var/log/midolman/ +MIDO_DEBUG_PORT=8001 +JMX_PORT="7200" +MIDO_CFG_FILE=midolman.conf +QUAGGA_DIR=/var/run/quagga +# setting this option will make the agent not run under the watchdog +#WATCHDOG_DISABLE= +WATCHDOG_TIMEOUT=10 + +# Amount of memory to allocate for the JVM heap. +MAX_HEAP_SIZE="{%-if gateway.template == 'medium' %}8192{%- else %}10240{%- endif %}M" + +# Here we create the arguments that will get passed to the jvm when +# starting midolman. + +# enable assertions. disabling this in production will give a modest +# performance benefit (around 5%). +# JVM_OPTS="$JVM_OPTS -ea" +JVM_OPTS="$JVM_OPTS -XX:+AggressiveOpts" + +# enable thread priorities, primarily so we can give periodic tasks +# a lower priority to avoid interfering with client workload +JVM_OPTS="$JVM_OPTS -XX:+UseThreadPriorities" +# allows lowering thread priority without being root. see +# http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workaround.html +JVM_OPTS="$JVM_OPTS -XX:ThreadPriorityPolicy=42" + +# min and max heap sizes should be set to the same value to avoid +# stop-the-world GC pauses during resize, and so that we can lock the +# heap in memory on startup to prevent any of it from being swapped +# out. +JVM_OPTS="$JVM_OPTS -Xms${MAX_HEAP_SIZE}" +JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}" +JVM_OPTS="$JVM_OPTS -XX:HeapDumpPath=/var/log/midolman/" +JVM_OPTS="$JVM_OPTS -XX:+HeapDumpOnOutOfMemoryError" +JVM_OPTS="$JVM_OPTS -XX:OnOutOfMemoryError=\"kill;-3;%p\"" + +# Do not use biased locking +JVM_OPTS="$JVM_OPTS -XX:-UseBiasedLocking" + +# GC tuning options +JVM_OPTS="$JVM_OPTS -XX:+UseG1GC" +JVM_OPTS="$JVM_OPTS -XX:MaxGCPauseMillis=500" +JVM_OPTS="$JVM_OPTS -XX:InitiatingHeapOccupancyPercent=70" +JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=8" +JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=8" +JVM_OPTS="$JVM_OPTS -XX:+UseTLAB" +JVM_OPTS="$JVM_OPTS -XX:+ResizeTLAB" +JVM_OPTS="$JVM_OPTS -XX:TLABSize=2m" +JVM_OPTS="$JVM_OPTS -XX:PretenureSizeThreshold=2m" + +# GC logging options +JVM_OPTS="$JVM_OPTS -XX:+PrintGCDetails" +JVM_OPTS="$JVM_OPTS -XX:+PrintGCTimeStamps" +JVM_OPTS="$JVM_OPTS -XX:+PrintClassHistogram" +JVM_OPTS="$JVM_OPTS -XX:+PrintTenuringDistribution" +JVM_OPTS="$JVM_OPTS -XX:+PrintGCApplicationStoppedTime" +JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation" +JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10" +JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M" +JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/midolman/gc-`date +%Y%m%d_%H%M%S`.log" + +# uncomment to have Midolman JVM listen for remote debuggers/profilers on port 1414 +# JVM_OPTS="$JVM_OPTS -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1414" + +# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See +# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version: +# comment out this entry to enable IPv6 support). +# JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=true" + +# uncomment to disable JMX +# JMXDISABLE=true + +# jmx: metrics and administration interface +# +# add this if you're having trouble connecting: +# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=" +# +# see +# http://blogs.sun.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole +# for more on configuring JMX through firewalls, etc. (Short version: +# get it working with no firewall first.) +if [ "x$JMXDISABLE" = "x" ] ; then + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false" + JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false" + HOSTNAME=`hostname` + JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=$HOSTNAME" +fi + +if [ "$MIDOLMAN_HPROF" = "1" ] ; then + DATE=$(date +'%H%M%S') + HPROF_FILENAME=${HPROF_FILENAME:-/tmp/midolman-$DATE.hprof} + JVM_OPTS="$JVM_OPTS -agentlib:hprof=cpu=samples,depth=100,interval=1,lineno=y,thread=y,file=$HPROF_FILENAME" +fi \ No newline at end of file diff --git a/midonet/files/v5.0/midolman.conf.compute b/midonet/files/v5.0/midolman.conf.compute new file mode 100644 index 0000000..5b0aa57 --- /dev/null +++ b/midonet/files/v5.0/midolman.conf.compute @@ -0,0 +1,32 @@ +{%- from "midonet/map.jinja" import compute with context %} +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +######################################################################## +# +# DEPRECATION NOTICE +# +# +# This file is DEPRECATED. Although FULLY backwards compatible. +# +# The two values found here will only be used by MidoNet to +# find the zookeeper server that holds MidoNet configuration. +# +# Please read mn-conf(1) for further details. +# +# You can import your midolman.conf configuration into the +# new system by running `mn-conf import`. (Check the manual +# page for usage example and details). +# +# +######################################################################## + +[zookeeper] +zookeeper_hosts = {% for member in compute.zookeeper.members %}{{ member.host }}:2181{% if not loop.last %},{% endif %}{% endfor %} \ No newline at end of file diff --git a/midonet/files/v5.0/midolman.conf.gateway b/midonet/files/v5.0/midolman.conf.gateway new file mode 100644 index 0000000..e8f44c3 --- /dev/null +++ b/midonet/files/v5.0/midolman.conf.gateway @@ -0,0 +1,32 @@ +{%- from "midonet/map.jinja" import gateway with context %} +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +######################################################################## +# +# DEPRECATION NOTICE +# +# +# This file is DEPRECATED. Although FULLY backwards compatible. +# +# The two values found here will only be used by MidoNet to +# find the zookeeper server that holds MidoNet configuration. +# +# Please read mn-conf(1) for further details. +# +# You can import your midolman.conf configuration into the +# new system by running `mn-conf import`. (Check the manual +# page for usage example and details). +# +# +######################################################################## + +[zookeeper] +zookeeper_hosts = {% for member in gateway.zookeeper.members %}{{ member.host }}:2181{% if not loop.last %},{% endif %}{% endfor %} \ No newline at end of file diff --git a/midonet/files/v5.0/midonet.conf b/midonet/files/v5.0/midonet.conf new file mode 100644 index 0000000..badd6bd --- /dev/null +++ b/midonet/files/v5.0/midonet.conf @@ -0,0 +1,17 @@ +{%- from "midonet/map.jinja" import control with context %} +# Copyright 2015 Midokura SARL +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[zookeeper] +zookeeper_hosts = {% for member in control.zookeeper.members %}{{ member.host }}:2181{% if not loop.last %},{% endif %}{% endfor %} \ No newline at end of file diff --git a/midonet/files/v5.0/midonetrc b/midonet/files/v5.0/midonetrc new file mode 100644 index 0000000..5986506 --- /dev/null +++ b/midonet/files/v5.0/midonetrc @@ -0,0 +1,6 @@ +{%- from "midonet/map.jinja" import control with context %} +[cli] +api_url = http://{{ control.identity.host }}:8181/midonet-api +username = admin +password = {{ control.identity.admin.password }} +project_id = admin \ No newline at end of file diff --git a/midonet/gateway.sls b/midonet/gateway.sls new file mode 100644 index 0000000..6871999 --- /dev/null +++ b/midonet/gateway.sls @@ -0,0 +1,43 @@ +{%- from "midonet/map.jinja" import gateway with context %} +{%- if gateway.enabled %} + +midonet_gateway_packages: + pkg.installed: + - names: {{ gateway.pkgs }} + +/etc/midolman/midolman.conf: + file.managed: + - source: salt://midonet/files/{{ gateway.version }}/midolman.conf.gateway + - template: jinja + - require: + - pkg: midonet_gateway_packages + +/etc/midolman/midolman-env.sh: + file.managed: + - source: salt://midonet/files/{{ gateway.version }}/midolman-env.sh.gateway + - template: jinja + - require: + - pkg: midonet_gateway_packages + +midonet_configure_template: + cmd.run: + - name: mn-conf template-set -h local -t agent-gateway-{{ gateway.template }} + - require: + - file: /etc/midolman/midolman.conf + +midonet_gateway_services: + service.running: + - names: {{ gateway.services }} + - enable: true + - watch: + - file: /etc/midolman/midolman.conf + +{%- if compute.enterprise.enabled %} + +midonet_enterprise_packages: + pkg.installed: + - names: + - midonet-jmxscraper + +{%- endif %} +{%- endif %} diff --git a/midonet/init.sls b/midonet/init.sls new file mode 100644 index 0000000..557c63c --- /dev/null +++ b/midonet/init.sls @@ -0,0 +1,17 @@ + +include: +{% if pillar.midonet.compute is defined %} +- midonet.compute +{% endif %} +{% if pillar.midonet.control is defined %} +- midonet.control +{% endif %} +{% if pillar.midonet.gateway is defined %} +- midonet.gateway +{% endif %} +{% if pillar.midonet.web is defined %} +- midonet.web +{% endif %} +{% if pillar.midonet.analytics is defined %} +- midonet.analytics +{% endif %} \ No newline at end of file diff --git a/midonet/map.jinja b/midonet/map.jinja new file mode 100644 index 0000000..62b4d91 --- /dev/null +++ b/midonet/map.jinja @@ -0,0 +1,55 @@ + +{% set compute = salt['grains.filter_by']({ + 'Debian': { + 'pkgs': ['openjdk-8-jre-headless', 'midolman', 'nova-network'], + 'services': ['midolman'] + }, + 'RedHat': { + 'pkgs': [], + 'services': [] + }, +}, merge=salt['pillar.get']('midonet:compute')) %} + +{% set gateway = salt['grains.filter_by']({ + 'Debian': { + 'pkgs': ['openjdk-8-jre-headless','midolman'], + 'services': ['midolman'] + }, + 'RedHat': { + 'pkgs': [], + 'services': [] + }, +}, merge=salt['pillar.get']('midonet:gateway')) %} + +{% set control = salt['grains.filter_by']({ + 'Debian': { + 'pkgs': ['midonet-cluster','python-midonetclient'], + 'services': ['midonet-cluster'] + }, + 'RedHat': { + 'pkgs': [], + 'services': [] + }, +}, merge=salt['pillar.get']('midonet:control')) %} + +{% set web = salt['grains.filter_by']({ + 'Debian': { + 'pkgs': ['midonet-manager'], + 'services': ['apache2'] + }, + 'RedHat': { + 'pkgs': [], + 'services': [] + }, +}, merge=salt['pillar.get']('midonet:web')) %} + +{% set analytics = salt['grains.filter_by']({ + 'Debian': { + 'pkgs': ['midonet-tools', 'midonet-analytics', 'python-elasticsearch-curator'], + 'services': [] + }, + 'RedHat': { + 'pkgs': [], + 'services': [] + }, +}, merge=salt['pillar.get']('midonet:analytics')) %} \ No newline at end of file diff --git a/midonet/meta/sensu.yml b/midonet/meta/sensu.yml new file mode 100644 index 0000000..a66a363 --- /dev/null +++ b/midonet/meta/sensu.yml @@ -0,0 +1,61 @@ +check: + local_system_cassandra_proc: + command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -a '/usr/share/cassandra' -u root -w 5 -c 10" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-database + local_contrail_ifmap_proc: + command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C ifmap-server -u contrail -c 1:1" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-config + local_contrail_analytics: + command: "PATH=$PATH:/etc/sensu/plugins check_contrail_analytics.sh" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-collector + local_contrail_database: + command: "PATH=$PATH:/etc/sensu/plugins check_contrail_database.sh" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-database + local_contrail_config: + command: "PATH=$PATH:/etc/sensu/plugins check_contrail_config.sh" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-config + local_contrail_control: + command: "PATH=$PATH:/etc/sensu/plugins check_contrail_control.sh" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-control + local_contrail_vrouter: + command: "PATH=$PATH:/etc/sensu/plugins check_vrouter.sh" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-compute + local_contrail_vrouter_agent_proc: + command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -a '/usr/bin/contrail-vrouter-agent' -u root -c 1:1" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-compute + local_contrail_supervisord_proc: + command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -a '/usr/bin/supervisord' -u root -c 2:2" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-compute + local_contrail_api: + command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_http -H 0.0.0.0 -p 9100 -w 5 -c 10 -e 401" + interval: 60 + occurrences: 1 + subscribers: + - local-opencontrail-config \ No newline at end of file diff --git a/midonet/meta/sphinx.yml b/midonet/meta/sphinx.yml new file mode 100644 index 0000000..bb41eab --- /dev/null +++ b/midonet/meta/sphinx.yml @@ -0,0 +1,176 @@ +doc: + name: OpenContrail + description: OpenContrail is an open source network virtualization platform for the cloud. + role: + {%- if pillar.opencontrail.config is defined %} + {%- from "opencontrail/map.jinja" import config with context %} + config: + name: config + param: + bind: + value: {{ config.bind.address }} + discovery: + name: "Discovery host" + value: {{ config.discovery.host }} + analytics: + name: "Analytics host" + value: {{ config.analytics.host }} + cache: + name: "Cache host" + value: {{ config.cache.host }} + version: + name: "Contrail version" + value: {{ config.version }} + database_host: + name: "Database members" + value: {% for member in config.database.members %}{{ member.host }}:{{ member.port }} {% endfor %} + network_host: + name: "Network service" + value: {{ config.network.host }}:{{ config.network.port }} + message_queue_ip: + name: "Message queue" + value: {{ config.message_queue.host }}:{{ config.message_queue.port }} + identity_host: + name: "Identity host ip" + value: {{ config.identity.user }}@{{ config.identity.host }}:{{ config.identity.port }} + packages: + value: | + {%- for pkg in config.pkgs %} + {%- set pkg_version = "dpkg -l "+pkg+" | grep "+pkg+" | awk '{print $3}'" %} + * {{ pkg }}: {{ salt['cmd.run'](pkg_version) }} + {%- endfor %} + {%- endif %} + {%- if pillar.opencontrail.control is defined %} + {%- from "opencontrail/map.jinja" import control with context %} + control: + name: control + param: + bind: + value: {{ control.bind.address }} + discovery: + name: "Discovery host" + value: {{ control.discovery.host }} + master: + name: "Master host" + value: {{ control.master.host }} + version: + name: "Contrail version" + value: {{ control.version }} + database_host: + name: "Database members" + value: {% for member in control.members %}{{ member.host }},{% endfor %} + packages: + value: | + {%- for pkg in control.pkgs %} + {%- set pkg_version = "dpkg -l "+pkg+" | grep "+pkg+" | awk '{print $3}'" %} + * {{ pkg }}: {{ salt['cmd.run'](pkg_version) }} + {%- endfor %} + {%- endif %} + {%- if pillar.opencontrail.database is defined %} + {%- from "opencontrail/map.jinja" import database with context %} + database: + name: database + param: + bind: + value: {{ database.bind.host }}{{ database.bind.port }} + discovery: + name: "Discovery host" + value: {{ database.discovery.host }} + version: + name: "Contrail version" + value: {{ database.version }} + data_dirs: + name: "Data dir for cassandra" + value: {{ database.data_dirs }} + database_host: + name: "Database members" + value: {% for member in database.members %}{{ member.host }},{% endfor %} + packages: + value: | + {%- for pkg in database.pkgs %} + {%- set pkg_version = "dpkg -l "+pkg+" | grep "+pkg+" | awk '{print $3}'" %} + * {{ pkg }}: {{ salt['cmd.run'](pkg_version) }} + {%- endfor %} + {%- endif %} + {%- if pillar.opencontrail.web is defined %} + {%- from "opencontrail/map.jinja" import web with context %} + web: + name: web + param: + bind: + value: {{ web.bind.address }} + analytics: + name: "Analytics host" + value: {{ web.analytics.host }} + cache: + name: "Cache host" + value: {{ web.cache.host }}{{ web.cache.port }} + version: + name: "Contrail version" + value: {{ web.version }} + identity_host: + name: "Identity host ip" + value: {{ web.identity.user }}@{{ web.identity.host }}:{{ web.identity.port }} + database_host: + name: "Database members" + value: {% for member in web.members %}{{ member.host }},{% endfor %} + packages: + value: | + {%- for pkg in web.pkgs %} + {%- set pkg_version = "dpkg -l "+pkg+" | grep "+pkg+" | awk '{print $3}'" %} + * {{ pkg }}: {{ salt['cmd.run'](pkg_version) }} + {%- endfor %} + {%- endif %} + {%- if pillar.opencontrail.collector is defined %} + {%- from "opencontrail/map.jinja" import collector with context %} + analytics: + name: analytics + param: + bind: + value: {{ collector.bind.address }} + discovery: + name: "Discovery host" + value: {{ collector.discovery.host }} + data_ttl: + name: "Data TTL hours" + value: {{ collector.data_ttl }} + version: + name: "Contrail version" + value: {{ collector.version }} + database_host: + name: "Database members" + value: {% for member in collector.database.members %}{{ member.host }}:{{ member.port }} {% endfor %} + packages: + value: | + {%- for pkg in collector.pkgs %} + {%- set pkg_version = "dpkg -l "+pkg+" | grep "+pkg+" | awk '{print $3}'" %} + * {{ pkg }}: {{ salt['cmd.run'](pkg_version) }} + {%- endfor %} + {%- endif %} + {%- if pillar.opencontrail.compute is defined %} + {%- from "opencontrail/map.jinja" import compute with context %} + vrouter: + name: vrouter + param: + discovery: + name: "Discovery host" + value: {{ compute.discovery.host }} + disable_flow_collection: + name: "Disable flow collection" + value: {{ compute.disable_flow_collection }} + version: + name: "Contrail version" + value: {{ compute.version }} + compute_interface: + name: vrouter vhost0 interface + value: | + * interface binded: {{ compute.interface.dev }} + * ip address: {{ compute.interface.address }} + * MTU: {{ compute.interface.mtu }} + packages: + value: | + {%- for pkg in compute.pkgs %} + {%- set pkg_version = "dpkg -l "+pkg+" | grep "+pkg+" | awk '{print $3}'" %} + * {{ pkg }}: {{ salt['cmd.run'](pkg_version) }} + {%- endfor %} + {%- endif %} \ No newline at end of file diff --git a/midonet/web.sls b/midonet/web.sls new file mode 100644 index 0000000..a25d924 --- /dev/null +++ b/midonet/web.sls @@ -0,0 +1,22 @@ +{%- from "midonet/map.jinja" import web with context %} +{%- if web.enabled %} + +midonet_web_packages: + pkg.installed: + - names: {{ web.pkgs }} + +/var/www/html/midonet-manager/config/client.js: + file.managed: + - source: salt://midonet/files/{{ web.version }}/client.js + - template: jinja + - require: + - pkg: midonet_web_packages + +midonet_web_services: + service.running: + - names: {{ web.services }} + - enable: true + - watch: + - file: /var/www/html/midonet-manager/config/client.js + +{%- endif %}