run as superuser
Some checks failed
CI / test-build (push) Has been cancelled

This commit is contained in:
2025-12-20 19:29:41 +00:00
parent 6202ef8e83
commit b1a47685f9
4 changed files with 42 additions and 95 deletions

View File

@@ -73,7 +73,7 @@ func (s *ISCSIService) ApplyConfiguration(targets []models.ISCSITarget) error {
func (s *ISCSIService) createTarget(target models.ISCSITarget) error {
// Use targetcli to create target
// Format: targetcli /iscsi create <IQN>
cmd := exec.Command("sudo", "-n", s.targetcliPath, "/iscsi", "create", target.IQN)
cmd := exec.Command(s.targetcliPath, "/iscsi", "create", target.IQN)
output, err := cmd.CombinedOutput()
if err != nil {
// Target might already exist, which is OK
@@ -88,13 +88,13 @@ func (s *ISCSIService) createTarget(target models.ISCSITarget) error {
// Enable TPG1 (Target Portal Group 1)
// Disable authentication
cmd = exec.Command("sudo", "-n", s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1", "set", "attribute", "authentication=0")
cmd = exec.Command(s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1", "set", "attribute", "authentication=0")
if output, err := cmd.CombinedOutput(); err != nil {
fmt.Printf("warning: failed to set authentication=0: %v (output: %s)\n", err, string(output))
}
// Enable generate_node_acls (allow all initiators if no ACLs specified)
cmd = exec.Command("sudo", "-n", s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1", "set", "attribute", "generate_node_acls=1")
cmd = exec.Command(s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1", "set", "attribute", "generate_node_acls=1")
if output, err := cmd.CombinedOutput(); err != nil {
fmt.Printf("warning: failed to set generate_node_acls=1: %v (output: %s)\n", err, string(output))
} else {
@@ -102,20 +102,20 @@ func (s *ISCSIService) createTarget(target models.ISCSITarget) error {
}
// Create portal if not exists (listen on all interfaces, port 3260)
cmd = exec.Command("sudo", "-n", s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "create")
cmd = exec.Command(s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "create")
if err := cmd.Run(); err != nil {
// Portal might already exist, which is OK
// Check if portal exists
cmd = exec.Command("sudo", "-n", s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "ls")
cmd = exec.Command(s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "ls")
output, err2 := cmd.Output()
if err2 != nil || len(strings.TrimSpace(string(output))) == 0 {
// No portal exists, try to create with specific IP
// Get system IP
systemIP, _ := s.getSystemIP()
cmd = exec.Command("sudo", "-n", s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "create", systemIP)
cmd = exec.Command(s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "create", systemIP)
if err3 := cmd.Run(); err3 != nil {
// Try with 0.0.0.0 (all interfaces)
cmd = exec.Command("sudo", "-n", s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "create", "0.0.0.0")
cmd = exec.Command(s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1/portals", "create", "0.0.0.0")
if err4 := cmd.Run(); err4 != nil {
// Log but don't fail - portal might already exist
fmt.Printf("warning: failed to create portal: %v", err4)
@@ -125,7 +125,7 @@ func (s *ISCSIService) createTarget(target models.ISCSITarget) error {
}
// Save configuration
cmd = exec.Command("sudo", "-n", s.targetcliPath, "saveconfig")
cmd = exec.Command(s.targetcliPath, "saveconfig")
cmd.Run() // Ignore errors
return nil
@@ -141,7 +141,7 @@ func (s *ISCSIService) configureACLs(target models.ISCSITarget) error {
return fmt.Errorf("set generate_node_acls: %w", err)
}
// Disable authentication for open access
cmd = exec.Command("sudo", "-n", s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1", "set", "attribute", "authentication=0")
cmd = exec.Command(s.targetcliPath, "/iscsi/"+target.IQN+"/tpg1", "set", "attribute", "authentication=0")
cmd.Run() // Ignore errors
return nil
}