Hi, Does anyone can get any hint for the assignment below?
I have set up 2 VM machines but I fail to understand how to set up 
microservices that retrieve the files.

Here is what I have done so far:

Vagrant file:
Vagrant.configure("2") do |config|
config.vm.define "backend" do |backend|
backend.vm.box = "bento/ubuntu-16.04"
backend.vm.network :forwarded_port, guest: 80, host: 4568
backend.vm.provider "virtualbox" do |vb|
vb.memory = '512'
end
#backend.vm.network "private_network", type: "dhcp"
backend.vm.network "private_network", ip: '10.1.1.15'
backend.vm.provision "shell", path: "provisioners/install_python_nameko.sh"
end

config.vm.define "frontend" do |frontend|
frontend.vm.box = "bento/ubuntu-16.04"
frontend.vm.network "forwarded_port", guest: 80, host: 4567
frontend.vm.provider "virtualbox" do |vb|
vb.memory = '512'
end
#frontend.vm.network "private_network", type: "dhcp"
frontend.vm.network "private_network", ip: '10.1.1.30'
frontend.vm.provision "shell", path: "provisioners/install_python_nameko.sh"
#frontend.vm.provision "shell", path: "provisioners/install-node.sh"
end
end


Front end server:

import os
import urllib
from nameko.dependency_providers import Config
from nameko.web.handlers import http
from urllib.request import urlopen
import sys
import psutil



class HttpService:
name = "connect_to_client"
config = Config()

# Hello User! 
@http('GET', '/')
def get_method0(self, request):
print("\n")
ip = self.config.get('IP')
print("\n")
print("IP: " + str(ip))
print ("Calling Method 1 with python version: ",sys.version_info[:])
print("\n")
sys.stdout.flush()

# Format output for client
msg='''
Hello User!

'''
return msg 


# Trailing slash required to avoid 301 redirect which fails. Not resolved.
@http('GET', '/grab/<string:cmd>/')
def get_method1(self, request, cmd):
ip = config.get('IP')
print("\n")
print("IP: " + ip)
print("\n")
cip = "http://"+ip + "/" + cmd
print("\n")
print("IP: " + cip)
print("\n")
with urllib.request.urlopen(cip) as response:
html = response.read()
html = html.decode("utf8")
response.close()
return html

backend server:

import os
import urllib
from nameko.web.handlers import http
from urllib.request import urlopen
import sys
import psutil


class HttpService:
name = "psutils_client"

# Print commands
@http('GET', '/')
def get_method1(self, request):
print("\n")
print ("Calling Method 1 with python version: ",sys.version_info[:])
print("\n")
cmds = '''
COMMANDS: 
cpu_times 
virtual_memory 
swap_memory 
net_if_addrs
'''
sys.stdout.flush()
return cmds

@http('GET', '/cpu_times')
def get_cpu_times(self, request):
result = str(psutil.cpu_times()) + '''

'''
return result

@http('GET', '/virtual_memory')
def get_virtual_memory(self, request):
result = str(psutil.virtual_memory()) + '''

'''
return result

@http('GET', '/swap_memory')
def get_swap_memory(self, request):
result = str(psutil.swap_memory()) + '''

'''
return result
@http('GET', '/net_if_addrs')
def get_net_if_addrs(self, request):
result = str(psutil.net_if_addrs()) + '''

'''
return result

I do not know what command should be for the file retrieval.

When I run %nameko run frontend
and then on client curl http://10.1.1.30:80 nothing happen.

Any advice on how to approach it?

Thank you,
Xolosno

The assignment:

Create a simple file retrieval service that consists of two Microservices 
and a Client. The following depicts the architecture:

Client (Bash shell script) --> FrontEnd Microservice --> BackEnd 
Microservice

*BackEnd Micorservice*

The backend, BackEnd, is a simple Python program running in Nameko that has 
one method:

getFileContents(name-of-file) – return the contents of a file

In a subdirectory named “files”, which resides under the directory where 
BackEnd.py is, create 4 text files: a.txt, b.txt, c.txt, d.txt

 Put different text into each file.

To get the contents of file a.txt, a caller calls getFileContents(“a.txt”), 
to get the contents of b.txt, the caller calls getFileContents(“b.txt”), 
etc.

The BackEnd microservice must run in a Vagrant-based Ubuntu 16.04 VM. So, 
besides writing the code for the microservice, you must also write the 
vagrant file and the provisioning code needed to install Python 3, Nameko, 
and any other dependencies that are needed.

*FrontEnd Microservice*

The frontend microservice, FrontEnd, is a simple Python-based HTTP object 
that receives an HTTP request to get a specific file – a.txt, b.txt, c.txt, 
d.txt. This Python module is integrated into Nameko to receive the HTTP 
requests.

You only have to handle requests for files that exist. When a request comes 
in, the FrontEnd code needs to parse the request and call getFileContents 
in the BackEnd microservice, to get the requested file

When the FrontEnd microservice gets the return from the BackEnd 
microservice, it returns the file contents (returned by getFileContents) 
within the HTTP response it sends back to the client.

The FrontEnd microservice must run in a Vagrant-based Ubuntu 16.04 VM. So, 
besides writing the code for the microservice, you must also write the 
vagrant file and the provisioning code needed to install Python 3, Nameko, 
and any other dependencies that are needed.

*Client*

The Client is a simple bash script that runs in the host machine. It uses 
wget or curl to get each file.

-- 
This mailing list is governed under the HashiCorp Community Guidelines - 
https://www.hashicorp.com/community-guidelines.html. Behavior in violation of 
those guidelines may result in your removal from this mailing list.

GitHub Issues: https://github.com/mitchellh/vagrant/issues
IRC: #vagrant on Freenode
--- 
You received this message because you are subscribed to the Google Groups 
"Vagrant" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vagrant-up/0a115887-af3c-4506-a716-55a4246b07b5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to