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.