Prophet is a tool to discover resources detailed for cloud migration, cloud backup and disaster recovery

Overview

HyperBDR

云迁移/云灾备必备的调研工具

 release Stars


目录

项目说明

prophet是一个用于云迁移与云灾备前期技术调研使用的工具,目前主要对源端主机的基本情况进行采集,通过技术指标的比对,确保被调研的源端主机能够正确被HyperMotion/HyperBDR工具正确迁移或灾备。该项目目前已经在多个实际的云迁移和云灾备项目中得到验证,可以放心使用。

该项目未来发展的愿景是提供一站式调研平台,包括但不限于如下资源:各种云平台资源使用状况、文件存储、对象存储、容器平台、大数据平台、中间件、数据库等。同时也将提供蓝图画板,方便在项目前期进行方案编写使用,降低云迁移与云灾备过于冗长的前期调研周期。

目前prophet主要有以下功能组成:

  • 通过nmap指令扫描全网存活的主机,并尽量通过包信息分析主机的基本情况
  • (稳定)通过VMWare API接口采集主机的详细信息,包含计算、存储和网络等与主机迁移
  • (测试)通过Ansible获取Linux主机的详细信息,包含计算、存储和网络等与主机相关信息
  • (测试)通过Windows WMI接口采集Windows主机的详细信息,包含计算、存储和网络等与主机相关信息
  • (稳定)将采集后的结果以yaml格式进行打包和压缩,并进行脱敏处理(移除用户相关信息)
  • (稳定)对采集后的结果进行分析,得出最终的技术调研结论

安装说明

代码安装

git clone https://github.com/Cloud-Discovery/prophet

cd prophet
virtualenv venv
source venv/bin/activate

pip install -r requirements.txt
pip install .

容器方式

目前该项目每次提交后都会自动进行构建并推送到国内容器源中,可以直接使用

docker pull registry.cn-beijing.aliyuncs.com/oneprocloud-opensource/cloud-discovery-prophet:latest

使用说明

基本使用流程

  1. 扫描指定的IP地址段
  2. 在扫描结果的csv中,填写需要获取详情的主机鉴权信息
  3. 批量采集
  4. 分析, 得到结果

(稳定)功能一:扫描全网运行的实例

功能说明

通过网络扫描发现某一网段内存活的主机,并进行记录,可以作为后续更详细信息采集的输入。扫描完成后,将自动在指定路径下生成scan_hosts.csv文件,用于存储信息。

***** 注意:为了防止对生产环境造成较大压力,扫描时采用单进程方式,所以扫描进度较慢,经过测算扫描一个子网掩码为24的子网所需要30分钟左右的时间。**

usage: prophet-collect scan [-h] --host HOST [--arg ARG] --output-path
                            OUTPUT_PATH

optional arguments:
  -h, --help            show this help message and exit
  --host HOST           Input host, example: 192.168.10.0/24, 192.168.10.1-2
  --arg ARG             Arguments for nmap, for more detailed, please check
                        nmap document
  --output-path OUTPUT_PATH
                        Generate initial host report path

示例一: 获取子网主机

扫描192.168.10.0/24所有存活主机信息,并将csv文件生成在/tmp目录中。

prophet-collect scan --host 192.168.10.0/24 --output-path /tmp/

示例二: 获取指定IP网段主机

扫描192.168.10.2-192.168.10.50所有存活主机信息,并将csv文件生成在/tmp目录中。

prophet-collect scan --host 192.168.10.2-50 --output-path /tmp/

csv结构说明

字段名称 字段说明
hostname 主机名,可以为空
ip 用户IP地址,必须
username 用户名,如果为VMware,则为ESXi或者vCenter的用户名
password 密码,如果为VMware,则为ESXi或者vCenter的用户名
ssh_port Linux,该字段为ssh端口VMware ESXi或vCenter则为连接端口,默认为443Windows则默认为空
key_path 如果为密钥登陆,需要指定密钥的绝对路径,否则为空
mac 主机MAC地址,可以为空
vendor 生产厂商,可以为空,如果是VMware运行的虚拟机则为VMware
check_status 是否需要采集详细信息, 如果需要则设置为check,否则工具将自动跳过
os 操作系统类型,目前支持的类型为:Linux/Windows/VMware,大小写敏感
version 操作系统的版本,可以为空
tcp_ports 对外开放的端口,可以为空
do_status 详细信息采集状态,表示是否完成采集或者失败,默认为空

参考样例

(稳定)功能二:详细信息采集

功能说明

用户在模板填入鉴权信息后,进行进一步详细扫描。

注意:

  • 如果是VMware的虚拟机,则只会通过所在的ESXi主机进行扫描
  • 如果是Windows主机,需要Administrator用户进行扫描
  • 采集主机如果成功,则再次运行脚本时不会再进行采集,除非用户指定force-check参数
  • 采集失败的主机在下一次采集时,会重新采集
  • 最终生产的压缩包,一切与用户鉴权相关的敏感信息都已经被移除
  • (稳定)目前VMware采集部分是稳定的
  • (测试)目前Linux和Windows采集部分仍然是测试版本
usage: prophet-collect collect [-h] --host-file HOST_FILE --output-path
                               OUTPUT_PATH [-f]

optional arguments:
  -h, --help            show this help message and exit
  --host-file HOST_FILE
                        Host file which generated by network scan
  --output-path OUTPUT_PATH
                        Output path for batch collection
  -f, --force-check     Force check all hosts

示例:执行采集

首先需要在生成的scan_csv.csv中更新要采集主机的鉴权信息。

prophet-collect collect --host-file /tmp/scan_hosts.csv --output-path /tmp -f

采集结果说明

采集目录结构

host_collection_info
|-- linux_hosts -> Linux主机采集信息
|-- vmware_hosts -> VMWare主机采集信息
`-- windows_hosts -> Windows主机采集信息
|-- mac_info.yaml -> 所有主机根据Mac地址进行索引,便于后续分析
|-- prophet.log -> 采集过程中的日志,便于对于未知场景分析
|-- scan_hosts.csv -> 采集的主机文件,含开放端口信息

另外在输出目录中会生成host_collection_info_xxxxxxx.zip文件,该文件为最终用于分析的压缩文件。

(稳定)功能三: 分析并输出报告

功能说明

将采集后的结果进行分析,并输出最终的可迁移性报告,该部分可以根据需求扩展。

usage: prophet-analysis report [-h] --package-file PACKAGE_FILE --output-path
                               OUTPUT_PATH [--clean]

optional arguments:
  -h, --help            show this help message and exit
  --package-file PACKAGE_FILE
                        Investigate package file which is genreated by
                        prophet-collect
  --output-path OUTPUT_PATH
                        Generate report path
  --clean               Generate report path

示例:分析并输出报告

prophet-analysis -d -v report --package-file /tmp/host_collection_info_20211215202459.zip --output-path /tmp

贡献者

感谢以下贡献者为本项目做出的贡献

Comments
  • linux 磁盘容量计算有误

    linux 磁盘容量计算有误

    client command report: [root@mTDI-RH6 tmp]# fdisk -l

    Disk /dev/sda: 32.2 GB, 32212254720 bytes 64 heads, 32 sectors/track, 30720 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0001ae9e

    prophet report: 磁盘总容量(GB) 28610.23

    opened by shgaolin 1
  • Collect public cloud billing data and analysis how many resources cost money everyday

    Collect public cloud billing data and analysis how many resources cost money everyday

    Requirements: As we used many public cloud, but some resources waste money everyday, but we don't know that. Collect cloud billing data and generate a report to show how many resources is used and spend everyday. This will help operator to know which resources is useless.

    opened by xiaoquqi 0
  • 采集主机,windows机器报错

    采集主机,windows机器报错

    填写csv文件,两台windows机器,一台机器可以采集,一台机器采集过程中报错

    bash-4.2# prophet-cli collect --host-file /root/scan_hosts.csv --output-path /root/ 2022-01-26 07:34:10,443 263 INFO [-] Collecting hosts information from /root/scan_hosts.csv... 2022-01-26 07:34:10,454 263 INFO [-] Found 26 host(s) in csv... 2022-01-26 07:34:10,455 263 INFO [-] Skip to check host [LINUX]192.168.10.10 2022-01-26 07:34:10,456 263 INFO [-] Skip to check host [LINUX]192.168.10.11 2022-01-26 07:34:10,456 263 INFO [-] Skip to check host [LINUX]192.168.10.12 2022-01-26 07:34:10,457 263 INFO [-] Skip to check host [LINUX]192.168.10.13 2022-01-26 07:34:10,458 263 INFO [-] Skip to check host [WINDOWS]192.168.10.14 2022-01-26 07:34:10,458 263 INFO [-] Skip to check host [LINUX]192.168.10.15 2022-01-26 07:34:10,459 263 INFO [-] Skip to check host [LINUX]192.168.10.16 2022-01-26 07:34:10,460 263 INFO [-] Skip to check host [LINUX]192.168.10.17 2022-01-26 07:34:10,460 263 INFO [-] Skip to check host [LINUX]192.168.10.18 2022-01-26 07:34:10,461 263 INFO [-] Collecting host [WINDOWS]192.168.10.19... 2022-01-26 07:34:10,468 263 INFO [-] Running Windows command Win32_ComputerSystem... 2022-01-26 07:34:10,553 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_ComputerSystem"" returned: 0 in 0.084s 2022-01-26 07:34:10,553 263 INFO [-] Running Windows command Win32_ComputerSystem success 2022-01-26 07:34:10,553 263 INFO [-] Found class name Win32_ComputerSystem. 2022-01-26 07:34:10,554 263 INFO [-] Running Windows command Win32_OperatingSystem... 2022-01-26 07:34:10,667 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_OperatingSystem"" returned: 0 in 0.114s 2022-01-26 07:34:10,668 263 INFO [-] Running Windows command Win32_OperatingSystem success 2022-01-26 07:34:10,668 263 INFO [-] Found class name Win32_OperatingSystem. 2022-01-26 07:34:10,669 263 INFO [-] Running Windows command Win32_DiskPartition... 2022-01-26 07:34:10,754 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_DiskPartition"" returned: 0 in 0.086s 2022-01-26 07:34:10,755 263 INFO [-] Running Windows command Win32_DiskPartition success 2022-01-26 07:34:10,755 263 INFO [-] Found class name Win32_DiskPartition. 2022-01-26 07:34:10,756 263 INFO [-] Running Windows command Win32_Processor... 2022-01-26 07:34:11,842 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_Processor"" returned: 0 in 1.086s 2022-01-26 07:34:11,843 263 INFO [-] Running Windows command Win32_Processor success 2022-01-26 07:34:11,843 263 INFO [-] Found class name Win32_Processor. 2022-01-26 07:34:11,843 263 INFO [-] Running Windows command Win32_PhysicalMemory... 2022-01-26 07:34:11,924 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_PhysicalMemory"" returned: 0 in 0.080s 2022-01-26 07:34:11,924 263 INFO [-] Running Windows command Win32_PhysicalMemory success 2022-01-26 07:34:11,925 263 INFO [-] Found class name Win32_PhysicalMemory. 2022-01-26 07:34:11,925 263 INFO [-] Running Windows command Win32_NetworkAdapterConfiguration WHERE IPEnabled=True... 2022-01-26 07:34:12,126 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True"" returned: 0 in 0.201s 2022-01-26 07:34:12,127 263 INFO [-] Running Windows command Win32_NetworkAdapterConfiguration WHERE IPEnabled=True success 2022-01-26 07:34:12,127 263 INFO [-] Found class name Win32_NetworkAdapterConfiguration. 2022-01-26 07:34:12,127 263 INFO [-] Running Windows command Win32_LogicalDisk WHERE DriveType = 3... 2022-01-26 07:34:12,242 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3"" returned: 0 in 0.115s 2022-01-26 07:34:12,243 263 INFO [-] Running Windows command Win32_LogicalDisk WHERE DriveType = 3 success 2022-01-26 07:34:12,243 263 INFO [-] Found class name Win32_LogicalDisk. 2022-01-26 07:34:12,243 263 INFO [-] Running Windows command Win32_DiskDrive... 2022-01-26 07:34:12,318 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_DiskDrive"" returned: 0 in 0.074s 2022-01-26 07:34:12,318 263 INFO [-] Running Windows command Win32_DiskDrive success 2022-01-26 07:34:12,319 263 INFO [-] Found class name Win32_DiskDrive. 2022-01-26 07:34:12,319 263 INFO [-] Running Windows command Win32_Process... 2022-01-26 07:34:12,458 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_Process"" returned: 0 in 0.139s 2022-01-26 07:34:12,459 263 INFO [-] Running Windows command Win32_Process success 2022-01-26 07:34:12,460 263 INFO [-] Found class name Win32_Process. 2022-01-26 07:34:12,462 263 INFO [-] Running Windows command Win32_PerfFormattedData_Tcpip_NetworkInterface... 2022-01-26 07:34:12,533 263 INFO [-] CMD "wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface"" returned: 1 in 0.070s 2022-01-26 07:34:12,533 263 INFO [-] 'wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface"' failed. Not Retrying. 2022-01-26 07:34:12,534 263 ERROR [-] Host 192.168.10.19 check failed due to: 2022-01-26 07:34:12,534 263 ERROR [-] Unexpected error while running command. Command: wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface" Exit code: 1 Stdout: '[wmi/wmic.c:212:main()] ERROR: Retrieve result data.\n' Stderr: 'NTSTATUS: NT code 0x80041010 - NT code 0x80041010\n' Traceback (most recent call last): File "/opt/prophet/prophet/collector/collector.py", line 149, in collect_hosts c.collect() File "/opt/prophet/prophet/collector/hosts/windows.py", line 48, in collect shell=True File "/opt/prophet/prophet/utils.py", line 288, in execute cmd=sanitized_cmd) prophet.utils.ProcessExecutionError: Unexpected error while running command. Command: wmic --delimiter "|ONEPROCLOUD|" -U Administrator%Abc999@1 //192.168.10.19 "SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface" Exit code: 1 Stdout: '[wmi/wmic.c:212:main()] ERROR: Retrieve result data.\n' Stderr: 'NTSTATUS: NT code 0x80041010 - NT code 0x80041010\n' 2022-01-26 07:34:12,561 263 INFO [-] Saving collection report to /root/hosts_collection/collection_report.csv 2022-01-26 07:34:12,561 263 INFO [-] Saved collection report to /root/hosts_collection/collection_report.csv

    opened by lihaha0218 0
  • 采集主机信息时,其中一台linux机器出现报错

    采集主机信息时,其中一台linux机器出现报错

    如图 image 填写完csv文件后,第一台192.168.10.10的机器采集报错,其余机器正常采集完成

    报错如下 bash-4.2# prophet-cli collect --host-file /root/scan_hosts.csv --output-path /root/ 2022-01-26 07:17:58,697 58 INFO [-] Creating collection path /root/hosts_collection... 2022-01-26 07:17:58,736 58 INFO [-] Collecting hosts information from /root/scan_hosts.csv... 2022-01-26 07:17:59,066 58 INFO [-] Found 26 host(s) in csv... 2022-01-26 07:17:59,098 58 INFO [-] Collecting host [LINUX]192.168.10.10... 2022-01-26 07:18:09,139 58 INFO [-] Precheck for Linux 192.168.10.10 connection 2022-01-26 07:18:09,140 58 INFO [-] Checking 192.168.10.10 SSH info... 2022-01-26 07:18:09,140 58 INFO [-] Collecting host 192.168.10.10 info... 2022-01-26 07:18:09,140 58 INFO [-] Prepare config file for Linux collection... 2022-01-26 07:18:09,206 58 INFO [-] Write ansible hosts to /tmp/tmpfgiu4wvr/hosts... 2022-01-26 07:18:09,234 58 INFO [-] Running ansible command... 2022-01-26 07:18:15,440 58 INFO [-] Collected host 192.168.10.10 info 2022-01-26 07:18:15,440 58 ERROR [-] Host 192.168.10.10 check failed due to: 2022-01-26 07:18:15,441 58 ERROR [-] Collect Linux 192.168.10.10 failed, please check yaml file for detailed Traceback (most recent call last): File "/opt/prophet/prophet/collector/collector.py", line 149, in collect_hosts c.collect() File "/opt/prophet/prophet/collector/hosts/linux.py", line 49, in collect "check yaml file for detailed" % self.ip) Exception: Collect Linux 192.168.10.10 failed, please check yaml file for detailed 2022-01-26 07:18:15,644 58 INFO [-] Saving collection report to /root/hosts_collection/collection_report.csv 2022-01-26 07:18:15,644 58 INFO [-] Saved collection report to /root/hosts_collection/collection_report.csv 2022-01-26 07:18:15,645 58 INFO [-] Skip to check host [LINUX]192.168.10.11 2022-01-26 07:18:15,646 58 INFO [-] Skip to check host [LINUX]192.168.10.12 2022-01-26 07:18:15,647 58 INFO [-] Collecting host [LINUX]192.168.10.13...

    opened by lihaha0218 1
  • 执行 prophet-cli collect --host-file /tmp/scan_hosts.csv --output-path /tmp的时候报错

    执行 prophet-cli collect --host-file /tmp/scan_hosts.csv --output-path /tmp的时候报错

    当scan_hosts.csv这个文件里没有机器,或者scan_hosts.csv有机器但是没有调用ansible去进行收集信息的时候,就会报错。报错的原因是:必须ansible收集到信息,才会开始去创建hosts_collection这个目录。一旦hosts_collection这个目录不能成功创建,就会出现报错。

    报错信息如下: 2022-01-14 11:10:55,360 20668 INFO [-] Need to check 0 host(s), success 0 hosts, failed 0 hosts. 2022-01-14 11:10:55,360 20668 INFO [-] ============================ 2022-01-14 11:10:55,360 20668 INFO [-] Copying log file into collection info path... 2022-01-14 11:10:55,360 20668 INFO [-] Copying /tmp/prophet.log to /tmp/hosts_collection... 2022-01-14 11:10:55,361 20668 INFO [-] Compressed pacakge in /tmp/, filename is hosts_collection_20220114111055.zip... Traceback (most recent call last): File "/root/prophet/venv/bin/prophet-cli", line 8, in sys.exit(main()) File "/root/prophet/venv/lib/python3.6/site-packages/prophet/cmd/cli.py", line 147, in main args.func(args) File "/root/prophet/venv/lib/python3.6/site-packages/prophet/cmd/cli.py", line 62, in collect_hosts host_collector.package() File "/root/prophet/venv/lib/python3.6/site-packages/prophet/collector/collector.py", line 196, in package self.collection_path) File "/usr/lib64/python3.6/shutil.py", line 785, in make_archive os.chdir(root_dir) NotADirectoryError: [Errno 20] Not a directory: '/tmp/hosts_collection'

    opened by qingyunliu 1
Owner
null
CEI Natural Disaster Tracking Portal

CEI Natural Disaster Tracking Portal (cc) Climatic Eye of ISCI We are an initiative that conducts studies in the field of Space Science, publishes pro

Baris Dincer 7 Dec 24, 2022
Url-check-migration-python - A python script using Apica API's to migrate URL checks between environments

url-check-migration-python A python script using Apica API's to migrate URL chec

Angelo Aquino 1 Feb 16, 2022
Participants of Bertelsmann Technology Scholarship created an awesome list of resources and they want to share it with the world, if you find illegal resources please report to us and we will remove.

Participants of Bertelsmann Technology Scholarship created an awesome list of resources and they want to share it with the world, if you find illegal

Wissem Marzouki 29 Nov 28, 2022
Python project that aims to discover CDP neighbors and map their Layer-2 topology within a shareable medium like Visio or Draw.io.

Python project that aims to discover CDP neighbors and map their Layer-2 topology within a shareable medium like Visio or Draw.io.

null 3 Feb 11, 2022
Workshop OOP - Workshop OOP - Discover object-oriented programming

Workshop OOP Découvrez la programmation orientée objet C'est quoi un objet ? Un

Francis Clairicia-Rose-Claire-Joséphine 5 May 2, 2022
Patch PL to disable LK verification. Patch LK to disable boot/recovery verification.

Simple Python(3) script to disable LK verification in Amazon Preloader images and boot/recovery image verification in Amazon LK ("Little Kernel") images.

Roger Ortiz 18 Mar 17, 2022
firefox session recovery

firefox session recovery

Ahmad Sadraei 5 Nov 29, 2022
This simple script generates a backup of a given Python and R environment

Python Environment Backup It’s always good to maintain your Python and R Anaconda environment packages properly listed and well-kept in case you have

Andrew Laganaro 1 Jul 13, 2022
JD-backup is an advanced Python script, that will extract all links from a jDownloader 2 file list and export them to a text file.

JD-backup is an advanced Python script, that will extract all links from a jDownloader 2 file list and export them to a text file.

Kraken.snv 3 Jun 7, 2022
Using Python to parse through email logs received through several backup systems.

outlook-automated-backup-control Backup monitoring on a mailbox: In this mailbox there will be backup logs. The identification will based on the follo

Connor 2 Sep 28, 2022
An awesome list of AI for art and design - resources, and popular datasets and how we may apply computer vision tasks to art and design.

Awesome AI for Art & Design An awesome list of AI for art and design - resources, and popular datasets and how we may apply computer vision tasks to a

Margaret Maynard-Reid 20 Dec 21, 2022
Inspect the resources of your android projects and understand which ones are not being used and could potentially be removed.

Android Resources Checker What This program will inspect the resources of your app and help you understand which ones are not being used and could pot

Fábio Carballo 39 Feb 8, 2022
An ongoing curated list of frameworks, libraries, learning tutorials, software and resources in Python Language.

Python Development Welcome to the world of Python. An ongoing curated list of frameworks, libraries, learning tutorials, software and resources in Pyt

Paul Veillard 2 Dec 24, 2021
Tools, guides, and resources for blockchain analysts to interface with data on the Ergo platform.

Ergo Intelligence Objective Provide a suite of easy-to-use toolkits, guides, and resources for blockchain analysts and data scientists to quickly unde

Chris 5 Mar 15, 2022
Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources.

Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources. It provides the necessary user stream data and order book data for trading in a format one would expect from a centralized exchange API.

litepresence 5 May 8, 2022
A collection of full-stack resources for programmers.

A collection of full-stack resources for programmers.

Charles-Axel Dein 22.3k Dec 30, 2022
One destination for all the developer's learning resources.

DevResources One destination for all the developer's learning resources. Find all of your learning resources under one roof and add your own. Live ✨ Y

Gaurav Sharma 33 Oct 21, 2022
A repository containing useful resources needed to complete the SUSE Scholarship Challenge #UdacitySUSEScholars #poweredbySUSE

SUSE-udacity-cloud-native-scholarship A repository containing useful resources needed to complete the SUSE Scholarship Challenge #UdacitySUSEScholars

Nandini Proothi 11 Dec 2, 2021
Resources for the 2021 offering of COMP 598

comp598-2021 Resources for the 2021 offering of COMP 598 General submission instructions Important Please read these instructions located in the corre

Derek Ruths 23 May 18, 2022