Code Monkey home page Code Monkey logo

wistar's Introduction

Wistar

Wistar is a tool to help create and share complex topologies of Virtual Machines and appliances.

screenshot

The most detailed, up to date, documentation can be found here: http://wistar.readthedocs.io/en/latest/

Your (virtual) CPU must expose the virtualization hooks. You can check with a simple grep.

egrep โ€˜(vmx|svm)โ€™ /proc/cpuinfo

If nothing is returned, you may need to modify BIOS to enable virtualization. Users running wistar within a virtual machine can search the Internet for enabling the VT hooks. As a note, wistar will not work in Virtualbox as the software does not support exposing the hooks to the guest. Some IaaS providers do not expose the flags (e.g., AWS) while others (i.e., DigitalOcean) do.

Quick Start instructions for KVM deployments:

To get started, you need a server running Ubuntu 14.04 (or some similar flavor) with libvirt, kvm and a few python tools.

Install the required Ubuntu packages-

root@wistar-build:~# apt-get install python-pip python-dev build-essential qemu-kvm libz-dev libvirt-bin socat python-pexpect python-libvirt libxml2-dev libxslt1-dev unzip bridge-utils genisoimage python-netaddr libffi-dev libssl-dev python-markupsafe libxml2-dev libxslt1-dev git mtools dosfstools

Install Python packages-

root@wistar-build:~# pip install pyvbox junos-eznc pyYAML Django==1.9.9 cryptography websocket-client

Wistar uses Linux bridges to connect VMs to each other and to any external networks. To connect VMs to the external world, you'll need at least one NIC in a bridge. In this example, the first NIC is put in a bridge called 'br0'. To connect VMs to this NIC, add an 'External Bridge' object to the topology with the corresponding name 'br0'. Multiple external bridges are supported.

Here is an example /etc/network/interfaces. Modify as needed for your set-up.

auto lo
iface lo inet loopback

iface eth0 inet manual

auto br0
iface br0 inet static
	address 10.10.11.60
	netmask 255.255.240.0
	network 10.10.0.0
	broadcast 10.10.15.255
	gateway 10.10.10.1
	dns-nameservers 8.8.8.8
	bridge_ports eth0
	bridge_stp off
	bridge_fd 0
	bridge_maxwait 0

The easiest way to change the new configuration is to reboot as sudo service networking restart and sudo /etc/init.d/networking server are broken in Ubuntu 14.04 Server.

Create the images and instances directories.

root@wistar-build:~# mkdir -p /opt/wistar/user_images/instances
root@wistar-build:~# mkdir -p /opt/wistar/seeds
root@wistar-build:~# mkdir -p /opt/wistar/media

Clone the GitHub repo.

root@wistar-build:/opt/wistar# git clone https://github.com/juniper/wistar.git wistar-master

Create the SQL tables.

root@wistar-build:/opt/wistar# cd wistar-master/
root@wistar-build:/opt/wistar/wistar-master# ./manage.py migrate
--snip--
root@wistar-build:/opt/wistar/wistar-master#

For development you can use the built-in web server.

root@wistar-build:/opt/wistar# cd wistar-master/
root@wistar-build:/opt/wistar/wistar-master# ./manage.py runserver 0.0.0.0:8080

Alternatively, you can configure a more robust web server such as Apache or nginx.

Here is how you can configure apache for use with wistar.

root@wistar-build:~# apt-get install apache2 libapache2-mod-wsgi
root@wistar-build:~# cat /etc/apache2/sites-enabled/999-wistar.conf
Define wistar_path /opt/wistar/wistar-master
Listen 8080
<VirtualHost *:8080>
   WSGIScriptAlias / ${wistar_path}/wistar/wsgi.py
   WSGIDaemonProcess wistar python-path=${wistar_path}
   WSGIProcessGroup wistar
   ErrorLog /var/log/apache2/wistar.log
   CustomLog /var/log/apache2/wistar_access.log combined
   Alias /static/ ${wistar_path}/common/static/

   <Directory "${wistar_path}/common/static">
   	Require all granted
   </Directory>
   <Directory ${wistar_path}>
   	<Files wsgi.py>
   		Require all granted
   	</Files>
   </Directory>
</VirtualHost>

Grant the apache user permissions to the wistar directory and the apache/wistar log files:

root@wistar-build:~# chown -R www-data:www-data /opt/wistar
root@wistar-build:~# chown -R www-data:www-data /var/log/apache2/wistar.log
root@wistar-build:~# chown -R www-data:www-data /var/log/apache2/wistar_access.log

Also, ensure the apache user is in the libvirtd group.

root@wistar-build:~# cat /etc/group | grep libvirt
libvirtd:x:111:nembery,nova,www-data

If not, use the following command to add the user to the group.

root@wistar-build:~# usermod -a -G libvirtd www-data

Quick Start for VMWare based deployments:

A Packer based project to automatically build OVF images for VMWare can be found here: https://github.com/nembery/wistar_packer

Uploading Images and deploying your first topology:

To begin, browse to the 'Images' page and upload a qcow2 or vmdk based image.

Next, browse to Topologies to create and deploy a new network!

Send questions to [email protected]

Happy Hacking!

Contributions

Wistar was written by Nathan Embery ([email protected]) with contributions from:

  • Subrata Mazumdar
  • Justin Adrian
  • Jeff Loughridge
  • Wayne Chan
  • Robin Gilijamse
  • Matt Dinham

Getting help

Send questions to the Wistar Slack channel at:

https://wistar-vtm.slack.com/

To sign up for the Slack channel, visit our heroku app here: https://wistar.herokuapp.com/

Visit this page: https://wistar.herokuapp.com/ to generate an invite.

The most detailed, up to date, documentation should be available here: http://wistar.readthedocs.io/en/latest/

wistar's People

Contributors

mattdinham avatar nembery avatar rgilijamse avatar thejhead avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wistar's Issues

Documentation outdated

Current version of Wistar has outdated docs.
It needs to include the following (but not limited to):
Saved config sets
Creation of scripts and usage
Can topologies be cloned? If so, what are the stipulations? Exact clones?
How do the Manage Port Proxies work? They also seemed to be buried a little.

cloud-init user_data is not passed to HEAT in openstack case

Right now cloud-init data is generated for Junos devices only. Linux devices should also get this autogenerated in the openstack deployment backend case as well as in the kvm case. The logic to build the user_data and meta_data strings should be factored out of here and into it's own function so it can be called from the generate_heat_template functions

duplicate PCI address error prevents domain from being defined

libvirt: Domain Config error : XML error: Attempted double use of PCI slot 0000:00:0a.0 (may need "multifunction='on'" for device on function 0)
XML error: Attempted double use of PCI slot 0000:00:0a.0 (may need "multifunction='on'" for device on function 0)
Raising exception
Caught Exception in deploy
Could not define domain

leaving out the memballoon block fixes this as it was conflicting with one of the interfaces

problem was noticed on a vMX with 6 revenue interfaces (8 total)

vqfx10k-re-15_1X53-D63.qcow2 crashes on boot

vqfx10k-re-15_1X53-D63.qcow2 crashes on boot:

[...]
MADT: Interrupt override: source 11, irq 11
ioapic0: intpin 11 trigger: level
lapic: Routing NMI -> LINT1
lapic: LINT1 trigger: edge
lapic: LINT1 polarity: high
ioapic0 <Version 1.1> irqs 0-23 on motherboard
cpu0 BSP:
     ID: 0x00000000   VER: 0x00050014 LDR: 0x00000000 DFR: 0xffffffff
  lint0: 0x00010700 lint1: 0x00000400 TPR: 0x00000000 SVR: 0x000001ff
  timer: 0x000100ef therm: 0x00010000 err: 0x000000f0 pmc: 0x00010400
netisr_init: !debug_mpsafenet, forcing maxthreads from 4 to 1
Falling back to <Software, Yarrow> random adaptor
random: <Software, Yarrow> initialized
crypto: <crypto core>
jmem: <memory>
pcidev module loaded, 0 (null)
fpga driver loaded, 0 (null)
kbd: new array size 4
io: <I/O>
mem: <memory>
null: <null device, zero device>
openfirm: <Open Firmware control device>
Initializing Kernel PVIDB.
kernel trap 9 with interrupts disabled


Fatal trap 9: general protection fault while in kernel mode
cpuid = 0; apic id = 00
instruction pointer	= 0x20:0xffffffff8043f7ce
stack pointer	        = 0x28:0xffffffff8250cb30
frame pointer	        = 0x28:0xffffffff8250cb60
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags	= resume, IOPL = 0
current process		= 0 (swapper)
[ thread pid 0 tid 100000 ]
Stopped at      vmem_alloc+0x2e:        movq    0x488(%rdi,%rax,8),%rdi
db> 

cat /proc/cpuinfo:

vendor_id	: AuthenticAMD
cpu family	: 21
model		: 2
model name	: AMD Opteron(tm) Processor 6376
stepping	: 0
microcode	: 0x600084f
cpu MHz		: 2300.000
cache size	: 2048 KB
physical id	: 1
siblings	: 16
core id		: 7
cpu cores	: 8
apicid		: 79
initial apicid	: 47
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl nonstop_tsc extd_apicid amd_dcm aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 popcnt aes xsave avx f16c lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 tce nodeid_msr tbm topoext perfctr_core perfctr_nb cpb hw_pstate bmi1 arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
bogomips	: 4599.37
TLB size	: 1536 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm 100mhzsteps hwpstate cpb eff_freq_ro

/usr/libexec/qemu-kvm --version

QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-141.el7_4.6), Copyright (c) 2003-2008 Fabrice Bellard

cat /etc/centos-release

CentOS Linux release 7.4.1708 (Core) 

vqfx10k-re-15_1X53-D60 works fine. Checksums have been verified.

sudo for OVS commands needs tty

If running as service, OVS commands cannot be run. This message occurs in the logs:
python: sudo: sorry, you must have a tty to run sudo

Downloading images in Webgui results in 404 Not Found

Any image present on the Wistar installation cannot be downloaded via the webgui.

Steps to reproduce:

  1. Upload or define a local image
  2. Click the download button in the Image Detail page

This then yields the Not Found error in the webbrowser and apache log:
"
The requested URL /static/user_images/ubuntu-17.10-server-cloudimg-amd64.img was not found on this server.
"

It is not a permissions issue since the image in question has www-data:www-data with -rwxrwxr-x as permissions.

There is no error in the /var/log/wistar.log

VFP interface types and quantities with KVM

Using e1000 for virbr0 and virtio for ge-0/0/* interfaces when using a small number of connections to the vmx ( 2 or less ) causes riot to fail to launch, resulting in the VFP failing to register to the VCP correctly.

This happens because the start_riot.sh script counts the devices by type to determine what to pass to the riot.py launcher and then onto riot.

# How many ports
#i40evf shows up as Device 154c, igbvf and ixgbevf show up as Ethernet Controller Virtual Function
sriov_dev_str="Ethernet Controller Virtual Function\|Device 154c"
vmx_junos_device_type_sriov=$(lspci | grep "$sriov_dev_str" | wc -l)
vmx_junos_device_type_virtio=$(lspci | grep "Virtio network device" | wc -l)
vmx_junos_device_type_e1000=$(lspci | grep "82545" | wc -l)
vmx_junos_device_type_vmxnet3=$(lspci | grep -i "vmxnet3" | wc -l)

if [ $vmx_junos_device_type_sriov -gt 0 ];
then
    numports=$vmx_junos_device_type_sriov
elif [ $vmx_junos_device_type_virtio -gt 2 ];
then
    numports=$(expr $vmx_junos_device_type_virtio - 2)
elif [ $vmx_junos_device_type_e1000 -gt 2 ];
then
    numports=$(expr $vmx_junos_device_type_e1000 - 2)
elif [ $vmx_junos_device_type_vmxnet3 -gt 0 ];
then
    numports=$vmx_junos_device_type_vmxnet3
fi
arg_str=`/home/pfe/riot/get_virtio_argstr $numcpus $numports $fab_enable $pfe_id $vmx_phase`
if [ $? -ne 0 ];
then
    logger -s "vFP Error: $arg_str"
    echo "vFP Error: $arg_str"
    exit 1
fi    

When numports is not greater than 2 the get_virtio_argstr tool can't generate the proper command string for riot.

When riot attempts to launch, it throws this error on the console and to syslog back to the VCP.

Incorrect value for --rx argument (-12)

I see the interface type is driven by the template in ajax/templates/ajax/kvm. I'd submit a pull request if I knew enough about Django to figure out where the value for interface.type is defined, but alas, I don't. I've hardcoded my local template for now to use virtio. Hope this helps.

-James

GUI showing wrong interface mappings

After creating the topology on the GUI, it is observed that it does not show the interface mapping correctly. For example vmx1 -- vmx2 interface is being shown as vmx1 -- vmx3.
Attachment shows the wrong mapping. The correct is as shown in the CLI below

root@vmxa_1# show interfaces
ge-0/0/0 {
description "To vmxa_2";
unit 0 {
family inet {
address 172.16.0.21/30;
}
}
}
ge-0/0/1 {
description "To vmxa_3";
unit 0 {
family inet {
address 172.16.0.25/30;
}
}
}
ge-0/0/2 {
description "To A-LR-mx104";
flexible-vlan-tagging;
encapsulation flexible-ethernet-services;
unit 101 {
vlan-id 101;
family inet {
address 172.16.0.13/30;
}
}
}
fxp0 {
unit 0 {
family inet {
address 192.168.122.2/24;
}
}
}
wistar1

LACP doesn't work on vQFX 18.4R1.8

I tested many times in my lab and found that LACP does not work on vQFX 18.4R1.8.

All the sides shows TX packets but there's nothing in the RX

root@vQFX1-MC-LAG1# run show lacp statistics interfaces
Aggregated interface: ae1
LACP Statistics: LACP Rx LACP Tx Unknown Rx Illegal Rx
xe-0/0/2 0 9111 0 0

root@vQFX2-MC-LAG2# run show lacp statistics interfaces
Aggregated interface: ae1
LACP Statistics: LACP Rx LACP Tx Unknown Rx Illegal Rx
xe-0/0/2 0 4290 0 0

root@vQFX3-SERVER-MC# run show lacp statistics interfaces
Aggregated interface: ae1
LACP Statistics: LACP Rx LACP Tx Unknown Rx Illegal Rx
xe-0/0/0 0 196 0 0
xe-0/0/1 0 195 0 0

{master:0}[edit]

Invalid URL in Git command in README.md

In the README.md file it says the git command to clone the repo is:

root@wistar-build:/opt/wistar# git clone https://github.com/nembery/wistar.git

Appears that has been moved from nembery's personal account to Juniper so it should now be:

root@wistar-build:/opt/wistar# git clone https://github.com/Juniper/wistar.git

Networking not working due to interface type equals to e1000

When the VMX template is using vre.js, the interface.type for the VFP is rendered out of the VCP jinja template instead of the VFP jinja template.

The current vre.js has INTERFACE_TYPE set to e1000:

root@node2:/opt/wistar/common/static/js/vm_types# cat vre.js
draw2d.shape.node.vre = draw2d.shape.node.wistarSetParent.extend({
    NAME: "draw2d.shape.node.vre",
    VCPU: 1,
    VRAM: 512,
    ICON_WIDTH: 50,
    ICON_HEIGHT: 10,
    ICON_FILE: "/static/images/vre.png",

    INTERFACE_PREFIX: "ge-0/0/",
    INTERFACE_TYPE: "e1000",

This is only a problem when the e1000 driver doesn't work properly. I have seen installations where the e1000 driver works just fine.

I am currently testing fixes and debugging where the things are going wrong. For now, I fixed this manually in the DB and via virsh edit.

vqfx re <-> pfe comms is broken

adding config-drive to vqfx images broke the pe - pfe communication. Work around is to manually add ip 169.254.0.2/24 to em1 on re. Fixme has been added to allow custom junos configuration templates per vm_type.

pip crypto does not install when specifying version 1.2.1


Failed building wheel for cryptography
Running setup.py clean for cryptography
Failed to build cryptography
Installing collected packages: cryptography, paramiko, lxml, ncclient, jinja2, scp, junos-eznc, Django, websocket-client
Running setup.py install for cryptography ... error
Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-taXxJq/cryptography/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-yqa9I_-record/install-record.txt --single-version-externally-managed --compile:


Command "/usr/bin/python -u -c "import setuptools, tokenize;file='/tmp/pip-build-taXxJq/cryptography/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-yqa9I_-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-taXxJq/cryptography/


Completes fine when version is left off pip install:
pip install pyvbox junos-eznc pyYAML Django==1.9.9 cryptography websocket-client

OpenStack: Add possibility to boot from volumes

Currently the HOT template used for instances in OpenStack simply boots from an image, which takes up ephemeral storage on compute nodes. This should also make the use of thin allocated storage possible. This is especially useful for the control plane, since it's virtual size is 30GB

I propose to add the option to boot from volume as well via configuration.

The template would go from:

heat_template_version: '2013-05-23'
resources:
  t8_volumeTesti1:
    properties:
      flavor: m1.large
      image: cirros3
      name: t8_volumeTesti1
      networks:
      - port: {get_resource: t8_volumeTesti1_port0}
    type: OS::Nova::Server
  t8_volumeTesti1_port0:
    properties:
      fixed_ips:
      - {ip_address: 192.168.122.36}
      network_id: wistar_mgmt
    type: OS::Neutron::Port

to:

heat_template_version: '2013-05-23'
resources:
  t8_volumeTesti1:
    depends_on: t8_volumeTesti1_vol0
    properties:
      flavor: m1.large
      name: t8_volumeTesti1
      networks:
      - port: {get_resource: t8_volumeTesti1_port0}
      block_device_mapping: [{ device_name: "vda", volume_id  : { get_resource : t8_volumeTesti1_vol0}, delete_on_termination : "true" }]
    type: OS::Nova::Server
  t8_volumeTesti1_vol0:
    type: OS::Cinder::Volume
    properties:
      size: 10
      image: cirros3
  t8_volumeTesti1_port0:
    properties:
      fixed_ips:
      - {ip_address: 192.168.122.36}
      network_id: wistar_mgmt
    type: OS::Neutron::Port

Python 3 support

Since Python 2 will not be maintained after January 1, 2020, the Wistar code base should be tested in Python 3 and incompatibilities resolved. This will allow users to run Wistar on newer Linux distributions in the future.

Libvirt-python not supported Python 2.7 EOL 1/1/2020

Please address Python upgrade Urgently
Not now possible to build libvirt-python within Python 2.7
libvirt-python now requires Python 3

=========================

DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting libvirt-python
Using cached libvirt-python-6.1.0.tar.gz (196 kB)
ERROR: Command errored out with exit status 1:
command: /opt/wistar/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-tvuTC4/libvirt-python/setup.py'"'"'; file='"'"'/tmp/pip-install-tvuTC4/libvirt-python/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-tvuTC4/libvirt-python/pip-egg-info
cwd: /tmp/pip-install-tvuTC4/libvirt-python/
Complete output (1 lines):
libvirt-python requires Python 3.x to build
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

Wistar needs to verify ports are already in use before assigning as VNC ports

Wistar currently configures each VM instance with an VNC port. There is a simple algorithm that chooses a new port that has not already been assigned to another VM instance. There is a configurable floor value that is set in configuration.py. However, there is no check if another process is already using that port, which can cause a VM to not start. A simple addition to osUtils.py would probably suffice. A check in wistarUtils.py around line 265 should use that function and iterate until is finds a new unused vnc port.

Openstack: HEAT generation can renumber ports leading to IP conflicts

The generation of a new HEAT template after updating a topology can lead to ports being reshuffled due to not accounting for the existing HEAT template.

This then leads to conflicts when for example unit_port0 was the mgmt_interface with an 192.168.122.0/24 IP and then suddenly changes to unit_port1 for the mgmt. Openstack reports that the IP is already in use.

Edit: This only seems to happen to devices that are deployed without a connection to other devices

lift restriction on short host names

currently vm names are restricted to 7 characters. This is kinda silly and only there due to the way we create and name networks. For networks that are used only to connect a VM to a companion VM, such as vqfx-re to vqfx-pfe, we create a dedicated network with a name of the form: tXX_HHH_c where XX is the topology id and HHH is the vm-re name. The VM RE name can't be more than 7 characters as libvirt has a restriction on the length of the network name. The proposal here would change the logic for network names to just be something unique. The value of mapping network names to topologies easily is probably less than the value of having host name with names greater than 7 characters.

Openstack backend should use openstacksdk

The current openstackUtils.py code uses static REST interactions with the openstack api.
This lacks support for different apis on different ips.

The backend code should use the openstacksdk to communicate with an openstack cluster

Check image status in get_glance_image_list

Function get_glance_image_list should check status of image. If status is "Queued" skip that image since there is no image file etc...

--- get_glance_image_list ---
{u'status': u'queued', u'schema': u'/v2/schemas/image', u'name': u'Ubuntu_01', u'tags': [], u'container_format': u'bare', u'created_at': u'2018-04-11T15:44:44Z', u'disk_format': u'qcow2', u'updated_at': u'2018-04-11T15:44:44Z', u'visibility': u'shared', u'id': u'12f65d1f-313e-4b59-8cfc-32d24b503983', u'owner': u'1f4e197f060c401aa21098a961f7ade3', u'protected': False, u'min_ram': 0, u'file': u'/v2/images/12f65d1f-313e-4b59-8cfc-32d24b503983/file', u'checksum': None, u'min_disk': 0, u'virtual_size': None, u'self': u'/v2/images/12f65d1f-313e-4b59-8cfc-32d24b503983', u'size': None}
Caught Exception in deploy
int() argument must be a string or a number, not 'NoneType'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.