diff --git a/.demo2-instance-with-init-script.py.swp b/.demo2-instance-with-init-script.py.swp new file mode 100644 index 0000000..4da3bb1 Binary files /dev/null and b/.demo2-instance-with-init-script.py.swp differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..37674a6 --- /dev/null +++ b/README.md @@ -0,0 +1,98 @@ +# Cloud Computing Project Submission +Group Number 2 + +Members: +- Emin Arslan 1581975, fd0003933 +- Yash Sharma 1573145, fd0003398 +- Sagarkumar Dipakbhai Rokad 1566440, fd0003372 +- Abhimanyu Rajesh Kanase 1569090, fd0003385 + + +## First Task + +First we understood the architecture of the faafo application and commands. +Then we changed the repository link in the install script for faafo to point +to Emin's [custom git repository](https://git.emin.software/haxala1r/cloud-computing-msc-ai-examples). This was necessary because the demo +deployment scripts pull from the remote repository when installing faafo +on an instance and local changes are ignored. + +After that, we added a few custom commands to the faafo command line tool. +First we added a delete-all command, which deletes all fractals. Second, +we added a delete-selected command, which takes a list of fractal UUIDs and +deletes all of them. By adding these custom commands we achived a greater +understanding of the faafo command line tool so that we can add more commands +as needed in the future. We also added help messages for the new commands +to provide a better user experience. + +List of changed files for task 1: +- faafo/contrib/install.sh (changed repository link) +- demo2-instance-with-init-script.py (changed repository link) +- demo3-microservice.py (changed repository link) +- demo4-1-scale-out.py (changed repository link) +- demo4-2-scale-out-add-worker.py (changed repository link) +- faafo/bin/faafo (added commands) + + +## Second Task + +The faafo application as given stores all image data, including the image file +itself in an SQL database. For the second task we changed the faafo API and +worker programs (faafo/faafo/api/service.py and faafo/faafo/worker/service.py) to store the image file in OpenStack object storage. Other +data about the image will still be stored in the database. + +We changed the API server such that it will no longer store the image as a blob +in the database. Instead, only a URL to the object containing the image data +is stored, and the API retreives this data when the image is requested. + +Upon first running the API, a new container with the name "fractals" will +be created under our account. This container will hold all generated fractal +image files. + +OpenStack authentication is currently performed by a pre-generated application +credential. In the first attempts we used password authentication directly. +In a real deployment, it would be best to instead have the deployment +script automatically generate a new set of application credentials for the API +and workers to use. + +OpenStack authentication using libcloud was a difficult roadblock. For a long +while we were stuck on this issue, as the example given in the documentation +did not work for us. We were eventually able to fix this by forcing v3 +authentication directly and using the base URL instead of the one given +by OpenStack. Here is the code example that worked for us: + +``` +from libcloud.storage.types import Provider +from libcloud.storage.providers import get_driver +import libcloud.security +libcloud.security.VERIFY_SSL_CERT = False + +cls = get_driver(Provider.OPENSTACK_SWIFT) +# Use these parameters for v3 authentication +driver = cls( + 'CloudComp2', # username + 'demo', # password + ex_force_auth_url='https://10.32.4.29:5000/', # NOT https://10.32.4.29:5000/v3 + ex_force_auth_version='3.x_password', # '3.x_appcred' for application credentials + ex_tenant_name='CloudComp2', + ex_domain_name='default' +) + +print(driver.list_containers()) +``` + +This code sample uses username and password directly for authentication. +Our submitted faafo application instead uses application credentials to +authenticate. In this case we had to change ex_force_auth_version to +'3.x_appcred'. + +We tried deploying using the demo2, demo3, demo4-1 and demo4-2 deployment scripts. +All of these deployments were successful and made use of OpenStack object storage +correctly, showing that the application in its current state is scalable. + +List of changed files for task 2: +- faafo/faafo/api/service.py +- faafo/faafo/worker/service.py + + +A more detailed breakdown of what exact changes were made to which file can +be found in [our git repository history](https://git.emin.software/haxala1r/cloud-computing-msc-ai-examples). \ No newline at end of file