openSUSE / mentoring

The openSUSE Developer Mentoring Program
http://101.opensuse.org
60 stars 49 forks source link

Provide a graphical interface for the Inter-Server Sync v2 #195

Closed avshiliaev closed 10 months ago

avshiliaev commented 1 year ago

Project Title:

Provide a graphical interface for the Inter-Server Sync v2

Description:

If you have more than one SUSE Manager installation, you need to ensure that they stay aligned on content and permissions. Inter-Server Synchronization (ISS) allows you to connect two or more SUSE Manager Servers and keep them up-to-date, i.e. synchronize the key objects you create on one SUSE Manager Server with another.

The most basic setup of the SUSE Manager is a tree, where the Server is a root and the leafs are represented by the managed systems. The Inter-Server Sync tools allows to effectively connect those trees under another root.

You can find more detail here.

Right now the Inter-Server Sync is implemented as a command line interface. The next logical step would be to provide it with the GUI. For this purpose it should be transformed into a deamon tracking its own state, probably triggered at recurring time intervals and providing an API for the graphical interface. The GUI itself could be implemented with some sound practices in mind. we propose using React based on Typescript, with some state management addition to it like Redux.

Deliverable:

Mentor: @avshiliaev (co-mentor to be defined)

Skills:

Skill Level:

Medium

Project Size:

Large Sized Project (350 hours)

Get started:

DiviyamPathak commented 1 year ago

hello its very interesting project is it there for gsoc 2023 i would be interested. I have experience creating api in node and django

Waer1 commented 1 year ago

hey Mr. @avshiliaev I hope that finds you well.

I think this project is really logical step after CLI , so I hope it to be accepted for gsoc 2023

after reading the documents https://documentation.suse.com/suma/4.2/en/suse-manager/administration/iss.html and comparing project required skills wit that i have, I am now excited to work on it,

so can I have you contact email or slack channel to briefly introduce myself and preview my image about this project

shatmanyu commented 1 year ago

Hi! @avshiliaev , I have 1+ year of experience working in react and this project looks interesting , hope it gets accepted for GSoc2023 , I have the required skills required for the project , so can I have you contact email or slack channel to briefly introduce myself and discuss the timelines regarding the project

vmmuthu31 commented 1 year ago

Sounds interesting. I would like to contribute to the project in GSOC"23

avshiliaev commented 1 year ago

Hey @DiviyamPathak! Thanks a lot for your interest in the project! I would say it's rather a hard requirement here to work with Go on the server side and React on the client one. We can think of what libraries to use though. If you're still interested, please let me know.

avshiliaev commented 1 year ago

Hey @Waer1! I very much appreciate your interest in the project!

First of all, I appologise for the owrong link I gave in the description. The right one should be of course Inter-Server Synchronization - Version 2. The whole concept is the same though.

As for the starting point, I would say the very first milestone would be to get familiar with the development environment setup. Take a closer look here at our sumaform project. It should help you spin up a couple of VMs with uyuni installed so you can actually perform the synchronization.

Feel free to drop me an email so we could organize a quick chat around the first steps in the project. Also feel free to post your ideas here in the thread.

avshiliaev commented 1 year ago

Hey @shatmanyu! That sounds awesome! Would you also be willing to work on the golang part of the project?

avshiliaev commented 1 year ago

Hey @vmmuthu31! The contributions are very much welcomed! How comfortable would you be working with React/Typescript and Go?

iAniket23 commented 1 year ago

Hey @avshiliaev! I am very interested in this project, and would love to work on this for GSoC 2023! I am very familiar with React, and have basic understanding of Golang (I have worked with Gin in one of my personal project)! I have emailed you in order to have quick chat so that I can get started with the project:))

Mayank-Tripathi32 commented 1 year ago

Hey @avshiliaev I would love to work on this project during GSoC 2023, I have some expierence with nodejs and reactjs. I can work with typescript aswell. Through I dont have much knowledge with golang but I would be willing to learn it as needed.

avshiliaev commented 1 year ago

Hey @iAniket23. Thank you a lot for your interest. I think Gin and React would work together just fine for this project. I've answered you in the e-mail.

avshiliaev commented 1 year ago

Hey @Leave-it-blank! I appreciate your interest!

As I've already said earlier in this thread, here's what you can do to get yourself familiar with the project requirements.

As for the starting point, I would say the very first milestone would be to get familiar with the development environment setup. Take a closer look here at our sumaform project. It should help you spin up a couple of VMs with uyuni installed so you can actually perform the synchronization.

If this thing doesn't scare you away :smile: , feel free to drop me an email so we could organize a quick chat around the first steps in the project. Also feel free to post your ideas here in the thread.

WordlessEcho commented 1 year ago

Hi. I am trying to run Sumaform in this main.tf:

terraform {
 required_version = "1.0.10"
 required_providers {
   libvirt = {
     source = "dmacvicar/libvirt"
     version = "0.6.3"
   }
 }
}

provider "libvirt" {
  uri = "qemu:///system"
}

module "base" {
  source = "./modules/base"

  cc_username = "UC7"
  cc_password = "<PASSWORD HERE>"

  // optional parameters with defaults below
  // use_avahi = true
  // name_prefix = "" // if you use name_prefix, make sure to update the server_configuration for clients/minions below
  // timezone = "Europe/Berlin"
  // use_ntp = true

  // use_mirror_images = false
  // mirror = "mirrors.ustc.edu.cn/opensuse"
  images = ["ubuntu2204o"]

  ssh_key_path = "~/.ssh/echo.pub"

  provider_settings = {
    network_name = "default" // change to null if you add a bridge below
//    additional_network = null
//    bridge = "bridge0"
//    pool = "default"
  }
}

module "master" {
  source = "./modules/server"
  base_configuration = module.base.configuration

  name = "master"
  product_version = "4.2-released"
  image = "ubuntu2204o"
  iss_slave = "slave.tf.local"
}

module "slave" {
  source = "./modules/server"
  base_configuration = module.base.configuration

  name = "slave"
  product_version = "4.2-released"
  image = "ubuntu2204o"
  iss_master = module.master.configuration["hostname"]
}

//module "server" {
//  source = "./modules/server"
//  base_configuration = module.base.configuration
//
//  name = "server"
//  product_version = "4.2-nightly"
//  // see modules/server/variables.tf for possible values
//
//  // connect_to_additional_network = true
//  // if you want to use two networks
//}
//
//module "client" {
//  source = "./modules/client"
//  base_configuration = module.base.configuration
//
//  name = "client"
//  image = "sles15sp4o"
//  server_configuration = module.server.configuration
//  // see modules/client/variables.tf for possible values
//}
//
//module "minion" {
//  source = "./modules/minion"
//  base_configuration = module.base.configuration
//
//  name = "minion"
//  image = "sles15sp4o"
//  server_configuration = module.server.configuration
//  // see modules/minion/variables.tf for possible values
//}

I have tried some image like opensuse154o, opensuse153o and ubuntu2204o. But eventually it will try to connect to http://download.suse.de that impossible to connect. Any hint for me or I could just start to write propose?

WordlessEcho commented 1 year ago

Finally setup VMs by this config:

terraform {
 required_version = "1.0.10"
 required_providers {
   libvirt = {
     source = "dmacvicar/libvirt"
     version = "0.6.3"
   }
 }
}

provider "libvirt" {
  uri = "qemu:///system"
}

module "base" {
  source = "./modules/base"

  cc_username = "UE7"
  cc_password = "<PASSWORD HERE>"

  // optional parameters with defaults below
  // use_avahi = true
  // name_prefix = "" // if you use name_prefix, make sure to update the server_configuration for clients/minions below
  // timezone = "Europe/Berlin"
  // use_ntp = true

  // use_mirror_images = false
  // mirror = "mirrors.ustc.edu.cn/opensuse"
  images = ["opensuse154o"]

  ssh_key_path = "~/.ssh/echo.pub"

  provider_settings = {
    network_name = "default" // change to null if you add a bridge below
//    additional_network = null
//    bridge = "bridge0"
//    pool = "default"
  }
}

module "server0" {
  source = "./modules/server"
  base_configuration = module.base.configuration

  name = "server0"
  product_version = "uyuni-released"
  image = "opensuse154o"
  // see modules/server/variables.tf for possible values

  // connect_to_additional_network = true
  // if you want to use two networks
}

module "server1" {
  source = "./modules/server"
  base_configuration = module.base.configuration

  name = "server1"
  product_version = "uyuni-released"
  image = "opensuse154o"
  // see modules/server/variables.tf for possible values

  // connect_to_additional_network = true
  // if you want to use two networks
}

image: I recommand opensuse. Check backend_modules/libvirt/base/main.tf for more. product_version: use uyuni-released. See server.sls#167. If you see some error about download.suse.de . Just search the link in codes of whole sumaform. You might find some clues. Here is some useful issue: sumaform#1108 sumaform#738

After you finished terraform apply. Use sudo virsh net-edit default to check IPs of VMs. And access Uyuni management web UI with "admin" and "admin" or SSH with "root" and "linux".

Sunnyweather1314 commented 1 year ago

Hi! @avshiliaev, I have some experience working in react and this project looks very interesting to me, hope it gets accepted for GSoc2023. I have been working on building a website using react with my team(Repo: https://github.com/CalCourse-Dev/CalCourse_FrontEnd)

avshiliaev commented 1 year ago

@WordlessEcho yes, you're right! For that you can pick uyuni-released as the product and the opensuse154o as the underlying image. As you've pointed out, the full list of images can be found here. As for the product version you should choose, everything starting with a semantic version, like 4.3.1 refers to our downstream product SUSE Manager, the upstream version relevant for this project is either uyuni-released or uyuni-master.

For @iAniket23 and anyone else to be able to get start quickly, here's an absolute minimum for setting up the two uyuni servers with sumaform to sync the data later between with the Inter Server Sync (installed separately).

terraform {
  required_version = "1.0.10"
  required_providers {
    libvirt = {
      source = "dmacvicar/libvirt"
      version = "0.6.3"
    }
  }
}

provider "libvirt" {
  uri = "qemu:///system"
}

module "base" {
  source = "./modules/base"

  cc_username = ""
  cc_password = ""

  domain            = "tf.local"
  images            = ["opensuse154o"]

  use_avahi = true
}

module "server-one" {
  source                  = "./modules/server"
  base_configuration      = module.base.configuration
  product_version         = "uyuni-released"
  name                    = "server-one"
}

module "server-two" {
  source                  = "./modules/server"
  base_configuration      = module.base.configuration
  product_version         = "uyuni-released"
  name                    = "server-two"
}

If you set the use_avahi option to true as in the example above and the libvirt is configured correctly, your servers should be available under the following FQDN <name>.<domain> from your configuration. In this case, it'll be server-one.tf.local and server-two.tf.local. You should also be able to ssh to your machines like this ssh root@server-one.tf.local and ssh root@server-two.tf.local. If you have problems with the latter, you probably need to specify the full path to your public key under ssh_key_path field in the module "base" {...}.

avshiliaev commented 1 year ago

Hey @Sunnyweather1314, that look interesting indeed. How comfortable would you be working with Golang as well?

avshiliaev commented 1 year ago

For those having passed the sumaform step, I'd suggest to try out the following to see if the synchronization works with your setup.

  1. First of all, here's the uyuni documentation. If the setup with the sumaform is correct, you'll probably only need the administration section of it.
  2. Create a software channel on one server. No need to import any packages for now, to see if it works an empty channel is enough.
  3. Go through these sequence of steps described in the README.
  4. Make sure the channel you've created on one server now is available on the other.

This should be sufficient to get started. Please post your questions here or refer to us on Gitter.

Sunnyweather1314 commented 1 year ago

Hey @Sunnyweather1314, that look interesting indeed. How comfortable would you be working with Golang as well?

I have some understanding of this language, but not much. Since I am familiar with other coding languages such as C and JAVA, I can pick it up quickly.

keshavsaini0905 commented 1 year ago

Hey @avshiliaev i have gone through the requirements for the project and it sounds great also the tech stack matches my skill set as well i have been working for 3 years on to the same. If still a hand is needed we should connect maybe on slack or better on a meet.

iAniket23 commented 1 year ago

@WordlessEcho yes, you're right! For that you can pick uyuni-released as the product and the opensuse154o as the underlying image. As you've pointed out, the full list of images can be found here. As for the product version you should choose, everything starting with a semantic version, like 4.3.1 refers to our downstream product SUSE Manager, the upstream version relevant for this project is either uyuni-released or uyuni-master.

For @iAniket23 and anyone else to be able to get start quickly, here's an absolute minimum for setting up the two uyuni servers with sumaform to sync the data later between with the Inter Server Sync (installed separately).

terraform {
  required_version = "1.0.10"
  required_providers {
    libvirt = {
      source = "dmacvicar/libvirt"
      version = "0.6.3"
    }
  }
}

provider "libvirt" {
  uri = "qemu:///system"
}

module "base" {
  source = "./modules/base"

  cc_username = ""
  cc_password = ""

  domain            = "tf.local"
  images            = ["opensuse154o"]

  use_avahi = true
}

module "server-one" {
  source                  = "./modules/server"
  base_configuration      = module.base.configuration
  product_version         = "uyuni-released"
  name                    = "server-one"
}

module "server-two" {
  source                  = "./modules/server"
  base_configuration      = module.base.configuration
  product_version         = "uyuni-released"
  name                    = "server-two"
}

If you set the use_avahi option to true as in the example above and the libvirt is configured correctly, your servers should be available under the following FQDN <name>.<domain> from your configuration. In this case, it'll be server-one.tf.local and server-two.tf.local. You should also be able to ssh to your machines like this ssh root@server-one.tf.local and ssh root@server-two.tf.local. If you have problems with the latter, you probably need to specify the full path to your public key under ssh_key_path field in the module "base" {...}.

Thanks @avshiliaev !

Madhav-Badodiya commented 1 year ago

Hey @avshiliaev, this project looks very interesting and I want to contribute to this project, I am new to open source and would love to have support from a mentor like you. I am familiar with React and Redux state management library. Let me know if I can contribute to this project in any way possible. Thank you!

Rohanberiwal commented 10 months ago

Hello! Is the project to create a graphical interface for Inter-Server Sync v2 still active? I noticed there's a label indicating it's "open." If it's still ongoing, I'd be interested in contributing and working on it. Thank you !