diff --git a/scripts/host-add-develop.sh b/scripts/host-add-develop.sh
new file mode 100755
index 0000000..dce4bde
--- /dev/null
+++ b/scripts/host-add-develop.sh
@@ -0,0 +1,151 @@
+#!/bin/bash
+
+##
+# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
+# This file is part of openmano
+# All Rights Reserved.
+#
+# 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.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact with: nfvlabs@tid.es
+##
+
+#Get configuration of a host for using it as a compute node
+
+function usage(){
+    echo  -e "usage: $0 user ip_name nb_cores GiB_memory nb_10GB_interfaces [hostname] [>> host.yaml]\n  Get host parameters and generated a yaml file to be used for openvim host-add"
+    echo -e "  - In case hostname is not specified it will be used the name of the machine where the script is run"
+    echo -e "  - nb_cores must be an odd number and bigger or equal to 4."
+    echo -e "  - GiB_memory must be an odd number and bigger or equal to 16. 4GiB of memory will be reserved for the host OS, the rest will be used by VM."
+    echo -e "  - nb_10GB_interfaces must be an odd number and bigger or equal to 4."
+    echo -e "  - The output will be a server descriptor with two numas and resources (memory, cores and interfaces) equally distributed between them."
+    echo -e "  - Each interface (physical funtion) will have defined 8 SR-IOV (virtual functions)."
+    exit 1
+}
+
+function get_hash_value() {   echo `eval  echo $\{\`echo $1[$2]\`\}`; }
+
+function get_mac(){
+  seed=$1
+  b1=$((seed%16)); seed=$((seed/16))
+  b2=$((seed%16)); seed=$((seed/16))
+  b3=$((seed%16)); seed=$((seed/16))
+  b4=$((seed%16)); seed=$((seed/16))
+  b5=$((seed%16)); seed=$((seed/16))
+  mac=`printf "%02X:%02X:%02X:%02X:%02X:%02X" 2 $b5 $b4 $b3 $b2 $b1`
+  echo $mac
+}
+
+
+#check root privileges and non a root user behind
+
+[ "$#" -lt "5" ] && echo "Missing parameters" && usage
+[ "$#" -gt "6" ] && echo "Too many parameters" && usage
+HOST_NAME=`cat /etc/hostname`
+[ "$#" -eq "6" ] && HOST_NAME=$6
+FEATURES_LIST="lps,dioc,hwsv,tlbps,ht,lps,64b,iommu"
+NUMAS=2
+CORES=$3
+MEMORY=$4
+INTERFACES=$5
+
+#Ensure the user input is big enough
+([ $((CORES%2)) -ne 0 ] || [ $CORES -lt 4 ] ) && echo -e "ERROR: Wrong number of cores\n" && usage
+([ $((MEMORY%2)) -ne 0 ] || [ $MEMORY -lt 16 ] ) && echo -e "ERROR: Wrong number of memory\n" && usage
+([ $((INTERFACES%2)) -ne 0 ] || [ $INTERFACES -lt 4 ] ) && echo -e "ERROR: Wrong number of interfaces\n" && usage
+
+#Generate a cpu topology for 4 numas with hyperthreading
+CPUS=`pairs_gap=$((CORES/NUMAS));numa=0;inc=0;sibling=0;for((thread=0;thread<=$((pairs_gap-1));thread++)); do printf " ${numa}-${sibling}-${thread} ${numa}-${sibling}-$((thread+pairs_gap))";numa=$(((numa+1)%$NUMAS)); sibling=$((sibling+inc)); inc=$(((inc+1)%2));  done`     
+
+#in this developing/fake server all cores can be used
+
+echo "#This file was created by $0"
+echo "#for adding this compute node to openvim"
+echo "#copy this file to openvim controller and run"
+echo "#openvim host-add <this>"
+echo
+echo "host:"
+echo "  name:    $HOST_NAME"
+echo "  user:    $1"
+echo "  ip_name: $2"
+echo "host-data:"
+echo "  name:        $HOST_NAME"
+echo "  user:        $1"
+echo "  ip_name:     $2"
+echo "  ranking:     100"
+echo "  description: $HOST_NAME"
+echo "  features:    $FEATURES_LIST"
+echo "  numas:"
+
+numa=0
+last_iface=0
+iface_counter=0
+while [ $numa -lt $NUMAS ]
+do
+  echo "  - numa_socket:  $numa"
+#MEMORY
+  echo "    hugepages: $((MEMORY/2-2))"
+  echo "    memory:    $((MEMORY/2))"
+
+#CORES
+  echo "    cores:"
+  for cpu in $CPUS
+  do
+    PHYSICAL=`echo $cpu | cut -f 1 -d"-"`
+    CORE=`echo $cpu | cut -f 2 -d"-"`
+    THREAD=`echo $cpu | cut -f 3 -d"-"`
+    [ $PHYSICAL != $numa ] && continue   #skip non physical
+    echo "    - core_id:   $CORE"
+    echo "      thread_id: $THREAD"
+    [ $CORE -eq 0 ] && echo "      status:    noteligible"
+  done
+ 
+
+  #GENERATE INTERFACES INFORMATION AND PRINT IT
+  seed=$RANDOM
+  echo "    interfaces:"
+  for ((iface=0;iface<$INTERFACES;iface+=2))
+  do
+    name="iface$iface_counter"
+    bus=$((iface+last_iface))
+    pci=`printf "0000:%02X:00.0" $bus`
+    mac=`get_mac $seed`
+    seed=$((seed+1))
+  
+    echo "    - source_name: $name"
+    echo "      Mbps: 10000"
+    echo "      pci: \"$pci\""
+    echo "      mac: \"$mac\""
+    echo "      switch_dpid: \"01:02:03:04:05:06\""
+    echo "      switch_port: fake0/$iface_counter"
+    echo "      sriovs:"
+
+    for((nb_sriov=0;nb_sriov<8;nb_sriov++))
+    do
+      pci=`printf "0000:%02X:10.%i" $bus $nb_sriov`
+      mac=`get_mac $seed`
+      seed=$((seed+1))
+      echo "      - mac: \"$mac\""
+      echo "        pci: \"$pci\""
+      echo "        source_name: $nb_sriov"
+    done
+  
+  iface_counter=$((iface_counter+1))
+  done
+  last_iface=$(((numa+1)*127/NUMAS+5)) #made-up formula for more realistic pci numbers 
+  
+
+  numa=$((numa+1))
+done
+
