+In some deployment models, you can combine Net C and Net A to be the
+same networks, but the developer should take care of IP address
+management between Net A and IPMI address of the server.
+
+Also note that the IPMI NIC may share the same RJ-45 jack with another
+one of the NICs.
+
+# Pre-installation Requirements
+There are two main components in ICN Infra Local Controller - Local
+Controller and k8s compute cluster.
+
+### Local Controller
+The Local Controller will reside in the jump server to run the Metal3
+operator, Binary Provisioning Agent (BPA) operator and BPA REST API
+controller.
+
+### k8s Compute Cluster
+The k8s compute cluster will actually run the workloads and is
+installed on bare metal servers.
+
+## Hardware Requirements
+
+### Minimum Hardware Requirement
+All-in-one VM based deployment requires servers with at least 32 GB
+RAM and 32 CPUs.
+
+### Recommended Hardware Requirements
+Recommended hardware requirements are servers with 64GB Memory, 32
+CPUs and SRIOV network cards.
+
+## Software Prerequisites
+The jump server is required to be pre-installed with Ubuntu 18.04.
+
+## Database Prerequisites
+No prerequisites for ICN blueprint.
+
+## Other Installation Requirements
+
+### Jump Server Requirements
+
+#### Jump Server Hardware Requirements
+- Local Controller: at least three network interfaces.
+- Bare metal servers: four network interfaces, including one IPMI interface.
+- Four or more hubs, with cabling, to connect four networks.
+
+(Tested as below)
+Hostname | CPU Model | Memory | Storage | 1GbE: NIC#, VLAN, (Connected extreme 480 switch) | 10GbE: NIC# VLAN, Network (Connected with IZ1 switch)
+---------|-----------|--------|---------|--------------------------------------------------|------------------------------------------------------
+jump0 | Intel 2xE5-2699 | 64GB | 3TB (Sata)<br/>180 (SSD) | eth0: VLAN 110<br/>eno1: VLAN 110<br/>eno2: VLAN 111 |
+
+#### Jump Server Software Requirements
+ICN supports Ubuntu 18.04. The ICN blueprint installs all required
+software during `make install`.
+
+### Network Requirements
+Please refer to figure 1 for all the network requirements of the ICN
+blueprint.
+
+Please make sure you have 3 distinguished networks - Net A, Net B and
+Net C as mentioned in figure 1. Local Controller uses the Net B and
+Net C to provision the bare metal servers to do the OS provisioning.
+
+### Bare Metal Server Requirements
+
+### k8s Compute Cluster
+
+#### Compute Server Hardware Requirements
+(Tested as below)
+Hostname | CPU Model | Memory | Storage | 1GbE: NIC#, VLAN, (Connected extreme 480 switch) | 10GbE: NIC# VLAN, Network (Connected with IZ1 switch)
+---------|-----------|--------|---------|--------------------------------------------------|------------------------------------------------------
+node1 | Intel 2xE5-2699 | 64GB | 3TB (Sata)<br/>180 (SSD) | eth0: VLAN 110<br/>eno1: VLAN 110<br/>eno2: VLAN 111 | eno3: VLAN 113
+node2 | Intel 2xE5-2699 | 64GB | 3TB (Sata)<br/>180 (SSD) | eth0: VLAN 110<br/>eno1: VLAN 110<br/>eno2: VLAN 111 | eno3: VLAN 113
+node3 | Intel 2xE5-2699 | 64GB | 3TB (Sata)<br/>180 (SSD) | eth0: VLAN 110<br/>eno1: VLAN 110<br/>eno2: VLAN 111 | eno3: VLAN 113
+
+#### Compute Server Software Requirements
+The Local Controller will install all the software in compute servers
+from the OS to the software required to bring up the k8s cluster.
+
+### Execution Requirements (Bare Metal Only)
+The ICN blueprint checks all the precondition and execution
+requirements for bare metal.
+
+# Installation High-Level Overview
+Installation is two-step process and everything starts with one
+command `make install`.
+- Installation of the Local Controller.
+- Installation of compute cluster.
+
+## Bare Metal Deployment Guide
+
+### Install Bare Metal Jump Server
+
+#### Creating a Node Inventory File
+
+##### Preconfiguration for the Local Controller in Jump Server
+The user is required to provide the IPMI information of the servers
+they connect to the Local Controller by editing node JSON sample file
+in the directory icn/deploy/metal3/scripts/nodes.json.sample as
+below. This example only shows 2 servers, statically configured on the
+baremetal network. If you want to increase servers, just add another
+array. If the baremetal network provides a DHCP server with gateway
+and DNS server information, just change the baremetal type to "ipv4".
+ICN provides DHCP servers for the provisioning network.
+
+`node.json.sample`
+``` json
+{
+ "nodes": [{
+ "name": "node1",
+ "ipmi_driver_info": {
+ "username": "admin",
+ "password": "admin",
+ "address": "10.10.10.11"
+ },
+ "os": {
+ "image_name": "bionic-server-cloudimg-amd64.img",
+ "username": "ubuntu",
+ "password": "mypasswd"
+ },
+ "net": {
+ "links": [
+ {
+ "id": "baremetal_nic",
+ "ethernet_mac_address": "00:1e:67:fe:f4:19",
+ "type": "phy"
+ },
+ {
+ "id": "provisioning_nic",
+ "ethernet_mac_address": "00:1e:67:fe:f4:1a",
+ "type": "phy"
+ },
+ {
+ "id": "sriov_nic",
+ "ethernet_mac_address": "00:1e:67:f8:6a:41",
+ "type": "phy"
+ }
+ ],
+ "networks": [
+ {
+ "id": "baremetal",
+ "link": "baremetal_nic",
+ "type": "ipv4",
+ "ip_address": "10.10.110.21/24",
+ "gateway": "10.10.110.1",
+ "dns_nameservers": ["8.8.8.8"]
+ },
+ {
+ "id": "provisioning",
+ "link": "provisioning_nic",
+ "type": "ipv4_dhcp"
+ },
+ {
+ "id": "sriov",
+ "link": "sriov_nic",
+ "type": "ipv4",
+ "ip_address": "10.10.113.2/24"
+ }
+ ],
+ "services": []
+ }
+ },
+ {
+ "name": "node2",
+ "ipmi_driver_info": {
+ "username": "admin",
+ "password": "admin",
+ "address": "10.10.10.12"
+ },
+ "os": {
+ "image_name": "bionic-server-cloudimg-amd64.img",
+ "username": "ubuntu",
+ "password": "mypasswd"
+ },
+ "net": {
+ "links": [
+ {
+ "id": "baremetal_nic",
+ "ethernet_mac_address": "00:1e:67:f1:5b:90",
+ "type": "phy"
+ },
+ {
+ "id": "provisioning_nic",
+ "ethernet_mac_address": "00:1e:67:f1:5b:91",
+ "type": "phy"
+ },
+ {
+ "id": "sriov_nic",
+ "ethernet_mac_address": "00:1e:67:f8:69:81",
+ "type": "phy"
+ }
+ ],
+ "networks": [
+ {
+ "id": "baremetal",
+ "link": "baremetal_nic",
+ "type": "ipv4",
+ "ip_address": "10.10.110.22/24",
+ "gateway": "10.10.110.1",
+ "dns_nameservers": ["8.8.8.8"]
+ },
+ {
+ "id": "provisioning",
+ "link": "provisioning_nic",
+ "type": "ipv4_dhcp"
+ },
+ {
+ "id": "sriov",
+ "link": "sriov_nic",
+ "type": "ipv4",
+ "ip_address": "10.10.113.3/24"
+ }
+ ],
+ "services": []
+ }
+ }]
+}
+```
+
+##### Local Controller Metal3 Configuration Reference
+- *node*: The array of nodes required to add to Local Controller.
+- *name*: This will be the hostname for the machine, once it is
+ provisioned by Metal3.
+- *ipmi_driver_info*: IPMI driver info is a json field. It currently
+ holds the IPMI information required for Ironic to send the IPMI tool
+ command.
+ - *username*: BMC username required to be provided for Ironic.
+ - *password*: BMC password required to be provided for Ironic.
+ - *address*: BMC server IPMI LAN IP address.
+- *os*: Bare metal machine OS information is a json field. It
+ currently holds the image name to be provisioned, username and
+ password for the login.
+ - *image_name*: Images name should be in qcow2 format.
+ - *username*: Login username for the OS provisioned.
+ - *password*: Login password for the OS provisioned.
+- *net*: Bare metal network information is a json field. It describes
+ the interfaces and networks used by ICN. For more information,
+ refer to the *networkData* field of the BareMetalHost resource
+ definition.
+ - *links*: An array of interfaces.
+ - *id*: The ID of the interface. This is used in the network
+ definitions to associate the interface with its network
+ configuration.
+ - *ethernet_mac_address*: The MAC address of the interface.
+ - *type*: The type of interface. Valid values are "phy".
+ - *networks*: An array of networks.
+ - *id*: The ID of the network.
+ - *link*: The ID of the link this network definition applies to.
+ - *type*: The type of network, either dynamic ("ipv4_dhcp") or
+ static ("ipv4").
+ - *ip_address*: Only valid for type "ipv4"; the IP address of the
+ interface.
+ - *gateway*: Only valid for type "ipv4"; the gateway of this
+ network.
+ - *dns_nameservers*: Only valid for type "ipv4"; an array of DNS
+ servers.
+
+#### Creating the Settings Files
+
+##### Local Controller Network Configuration Reference
+The user will find the network configuration file named as
+"user_config.sh" in the ICN parent directory.
+
+`user_config.sh`
+``` shell
+#!/bin/bash
+
+#Edge Location Provider Network configuration
+#Net A - Provider Network
+#If provider having specific Gateway and DNS server details in the edge location,
+#supply those values in nodes.json.
+
+#Ironic Metal3 settings for provisioning network
+#Interface to which Ironic provision network to be connected
+#Net B - Provisioning Network
+export IRONIC_INTERFACE="eno2"
+
+#Ironic Metal3 setting for IPMI LAN Network
+#Interface to which Ironic IPMI LAN should bind
+#Net C - IPMI LAN Network
+export IRONIC_IPMI_INTERFACE="eno1"
+
+#Interface IP for the IPMI LAN, ICN verfiy the LAN Connection is active or not
+#Net C - IPMI LAN Network
+export IRONIC_IPMI_INTERFACE_IP="10.10.10.10"
+```
+
+#### Running
+After configuring the node inventory file and network configuration
+files, please run `make install` from the ICN parent directory as
+shown below:
+
+``` shell
+root@pod11-jump:# git clone "https://gerrit.akraino.org/r/icn"
+Cloning into 'icn'...
+remote: Counting objects: 69, done
+remote: Finding sources: 100% (69/69)
+remote: Total 4248 (delta 13), reused 4221 (delta 13)
+Receiving objects: 100% (4248/4248), 7.74 MiB | 21.84 MiB/s, done.
+Resolving deltas: 100% (1078/1078), done.
+root@pod11-jump:# cd icn/
+root@pod11-jump:# vim Makefile
+root@pod11-jump:# make install