Skip to content

Commit

Permalink
add capstones to p1 and p2
Browse files Browse the repository at this point in the history
  • Loading branch information
madebygps committed Nov 1, 2023
1 parent 945531c commit 182cbb8
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 17 deletions.
52 changes: 44 additions & 8 deletions docs/phase1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,52 @@ Of course feel free to spend as much time as you'd like, people have asked for a
Bash for Beginners | [YouTube Video Series](https://aka.ms/bashforbeginners) | An introduction to Bash!| A 20 part YouTube series covering the fundamentals of Bash.
Networking | [Fundamentals of computer networking](https://learn.microsoft.com/en-us/training/modules/network-fundamentals/) | You'll learn the fundamental principles of computer networking to prepare you for the Azure admin and developer learning paths. | Read this after the previous video.

## Projects
## Capstone Project: CloudUploader CLI

Here are some projects to reinforce what you've learned in this phase. I recommend blogging or creating video content on your projects.
A bash-based CLI tool that allows users to quickly upload files to a specified cloud storage solution, providing a simple and seamless upload experience similar to popular storage services.

Your tool should be able to upload a file:
```sh
clouduploader /path/to/file.txt
```

### Steps:

1. Setup & Authentication:

- Choose a cloud provider (e.g., AWS S3, Google Cloud Storage, Azure Blob Storage).
- Setup authentication. For instance, with Azure, you'd use `az login` to set up your credentials.
2. CLI Argument Parsing:

- Use bash's built-in `$1`, `$2`, etc., to parse command-line arguments.
- `$1` could be the filename or path.
- Optionally, allow additional arguments like target cloud directory, storage class, or any other cloud-specific attributes.
3. File Check:

- Before uploading, check if the file exists using `[ -f $FILENAME ]`.
- Provide feedback if the file is not found
4. File Upload:

- Use cloud provider CLI to upload the file.

5. Upload Feedback:

- On successful upload, provide a success message.
- If there's an error, capture the error message and display it to the user.
6. Advanced Features (Optional):

- Allow multiple file uploads at once.
- Add a progress bar or percentage upload completion using tools like `pv`.
- Provide an option to generate and display a shareable link post-upload.
- Enable file synchronization -- if the file already exists in the cloud, prompt the user to overwrite, skip, or rename.
- Integrate encryption for added security before the upload.
7. Documentation:

- Write a README.md file that explains how to set up, use, and troubleshoot the tool. Include a brief overview, prerequisites, usage examples, and common issues.
8. Distribution:

- Package the script for easy distribution and installation. You can even provide a simple installation script or instructions to add it to the user's `$PATH`.

Title | Resource |
:---------- | :-----------
Create a script that uses the CLI of your cloud of choice to create an Ubuntu VM and setup a [LAMP server](https://en.wikipedia.org/wiki/LAMP_software_bundle). | [Ubuntu on public clouds](https://ubuntu.com/cloud/public-cloud)
Create a script that asks a user for a folder and spell checks every file in that folder. | |
Create a script that you provide the name of a video file in .mov format and converts to any other extension. Convert video files | Checkout [ffmpeg](https://ffmpeg.org/ffmpeg.html) |
Test your Bash skills with OverTheWire!|[Bandit](https://overthewire.org/wargames/bandit/) | A game to teach you the fundamental Bash commands you'll need for cloud and even security | This will cover more than the fundamentals. Similar to Linux Basics for hackers, it has a security focus.

## Things you should be able familiar with at the end of this phase

Expand Down
69 changes: 60 additions & 9 deletions docs/phase2/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,66 @@ I would suggest spending time on these two topics and this timeline:
| 3 | [A Beginner's Guide to Prompt Engineering with GitHub Copilot](https://dev.to/github/a-beginners-guide-to-prompt-engineering-with-github-copilot-3ibp) | An article by [Rizèl Scarlett](https://twitter.com/blackgirlbytes) on how to get the most out of GitHub Copilot.|
| 3 | [Introduction to GitHub Copilot](https://learn.microsoft.com/training/modules/introduction-to-github-copilot/) | An Microsoft Learn Module on how to use GitHub Copilot.|

## Projects

| Title | Description |
| :------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
[Create your GitHub profile readme](https://docs.github.com/en/github/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme) | Create a README to tell other people about yourself on GitHub
[Submit a Cloud Dictionary Definition](https://definethecloud.guide/) | Get featured on the LTC homepage and contribute to open source!
[7 Days of Python](https://7daysofpython.com/) | Build a Python Powered Blog |
Build a serverless API that displays your resume in JSON format and deploy it to your cloud environment.| [Here is an Azure example](https://github.com/madebygps/serverless-resume-api?ref=madebygps.com) |
Get hands-on with a Cloud SDK | Deploy a 2 or 3-tier architecture to a cloud with the appropriate Python SDK
## Capstone Project: PyCloud Deployer

A Python CLI tool that facilitates the deployment of a 2 or 3 tier infrastructure to a cloud provider of the your choice. The tool should provide the option to set up and tear down the infrastructure and return the public IP for SSH access upon successful deployment.

Your tool should be able to run:

- `pycloud-deployer setup --tier 3 --deployment-name <your-deployment-name>`
- `pycloud-deployer info --deployment-name <your-deployment-name>`
- `pycloud-deployer teardown --deployment-name <your-deployment-name>`

### Details:

#### 1\. Infrastructure Overview:

- 2-Tier: Consists of a Web/Application layer and a Database layer.
- 3-Tier: Consists of a Load Balancer, Web/Application layer, and a Database layer.

#### 2\. Functionalities:

- Setup: Deploy the chosen infrastructure to the specified cloud provider.
- Tear Down: Remove the entire deployed infrastructure.
- Get Info: Retrieve information about the deployed infrastructure, especially the public IP for SSH.

#### 3\. Programming:

- Modules: Utilize cloud SDKs/modules (e.g., `boto3` for AWS, `google-cloud` for GCP, `azure` for Azure) to interact with cloud services.
- OOP: Design classes representing each tier of the infrastructure. E.g., `LoadBalancer`, `WebServer`, `DatabaseServer`.
- Control statements: Logic to decide between deploying 2-tier vs 3-tier, checking if infrastructure is already deployed, etc.
- Exceptions: Handle potential cloud errors, such as quota exceedance, service unavailability, etc.
- Dictionaries: Store metadata about each tier, like instance IDs, public IPs, status, etc.

#### 4\. Implementation Steps:

1. Cloud Authentication: Authenticate the CLI tool with the cloud provider using API keys, service account credentials, or equivalent.

2. User Input:

- Take user input to decide on the cloud provider.
- Choose between 2-tier and 3-tier deployment.
- Optionally, accept specific configurations, like region, machine type, etc.
3. Deployment:

- For 2-Tier:
- Deploy a VM or instance for the Web/Application layer.
- Deploy a VM or instance for the Database layer.
- For 3-Tier:
- Deploy a Load Balancer.
- Deploy one or more VMs or instances behind the Load Balancer for the Web/Application layer.
- Deploy a VM or instance for the Database layer.
4. Return Information: After successful deployment, return the public IP (and possibly a private key for initial access if generated) for SSH.


```sh
Infrastructure successfully deployed!
Public IP for SSH: xx.xx.xx.xx
```


5. Tear Down Option: Allow the user to remove the entire setup using the CLI tool.


## Things you should be familiar with at the end of this phase

Expand Down

0 comments on commit 182cbb8

Please sign in to comment.