Package: plusclouds-service
Virtual Machine Deployment Wizard Agent ScriptThis python script has been written in order to decrease virtual machine deployment times and costs. These scripts are supposed to be placed into Virtual Machines and get triggered by a cronjob within specific time periods. The script uses the UUID of the VM to access its information through the public API. Then it checks whether there are any changes in storage, hostname, and password and update the VM according to that.What Changes?Storage SizeHostnamePasswordIf the client make any change in the dashboard about the configurations that are listed above, this python script will detect changes, and apply these changes to the instance. Most of the essential parts of this code are executed on the fly.Installing The plusclouds-service ModuleThere are multiple alternative ways to install the module.First one is preferred.1. By executing the following commandpython3.8-mpipinstallplusclouds-service2. By running the following code to install and run the module locallyimport urllib.request
url_repo='https://raw.githubusercontent.com/plusclouds/vmOperations/main/plusclouds.py'
exec(urllib.request.urlopen(url_repo).read())How to executepython3.8-mplusclouds-serviceBenefits of this approachMaintanence of the code for the future.You can either update the github repository or update the pip module instead of changing the scripts in each Virtual Machine Image.The script can run locally and can be updated when necessary.RequirementsPython 3.8Python3 distro package (1.8.0)Python3 request package (2.28.1)NotesLogging is limited to two files that are 2MB each. You can change the size and count of log files by changing maxBytes, and backupCount input variables in RotatingFileHandler call.For the hosname and password policy in Windows Servers, you can check the following linksPassword:https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirementsHostname:https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/naming-conventions-for-computer-domain-site-ouInstead of installing with the second option (By running the shown python script), it is best to periodically check for module updates by executing the following command.python3.8-mpipinstall--upgradeplusclouds-serviceInstalling the module locally and running update checks every 12 hours instead will save up to 70mb of traffic per VM daily.Folder Structure.
├── LICENSE
├── plusclouds.py
├── plusclouds-service
│   ├── __init__.py
│   ├── __main__.py
│   ├── module_search
│   │   ├── ansible_operations.py
│   │   ├── callback_agent.py
│   │   ├── __init__.py
│   │   └── service_search.py
│   ├── requirements.txt
│   ├── service.py
│   ├── storage.py
│   └── util
│       └── ssh_keys
│           ├── __init__.py
│           └── ssh_key_parser.py
├── pyproject.toml
├── README.md
└── requirements.txtDocumentationplusclouds.pyCode to be executed to install and run the plusclouds-service module.service.pyThe driver code for all the checks such as storage, hostname, and password. Responsible for handling the response taken from the server.storage.pycreate_file_if_not_exists(fname: str) -> Nonecreates file in given "fname" path if not existscreate_folder_if_not_exists(dirname: str) -> Nonecreate folder in given "dirname" path if not existsfile_read(fname: str) -> strreads and returns the first line of file located in "fname"file_write(fname: str, data: str) -> Nonewrites "data" to file located in "fname" by overwriting the file contents.file_exists(fname: str) -> boolreturns true if file_exists otherise returns false.get_distribution() -> strreturns the full distibution of the operating system.extend_disk() -> None:extends disk based on the current distributioncheck_disk(uuid: str) -> Nonechecks if there are any changes in the disk and if there are, executes extend_disk function based on the 		current OSmodule_searchansible_operations.pyexecute_playbook_script (directory: str)executes the script in yml playbook.download(url, dest_folder)downloads downloadable contents in the given url and saves them to "dest_folder"unzip(directory: str)unzips the compressed file in given directory to the same directorycallback_agent.pyclass CallbackAgentcreates a callback agent in given urlservice_search.pyclass PlusCloudsServicecreates two instances of CallbackAgent, one for service reports, one for ansible reports and downloads service files if missing. Initiates ansible and runs the playbook script.Supported DistributionsCentos (7,8)Debian (9,10,11)Pardus (18.0,19.0)Ubuntu (16.04,18.04,19.04,19.10,20.04)Fedora30Windows Server (2016,2019)Performance Results%400 faster deployment time.%65 decreased bandwidth usage.%35 less errors during deployment.Author InformationTalha Unsel -talha.unsel@plusclouds.comYigithan Saglam -saglamyigithan@gmail.comSemih Yönet -semihyonet@gmail.comZekican Budin -zekican.budin@plusclouds.com