(inventory coreansible.InventoryResult)
| 2695 | } |
| 2696 | |
| 2697 | func buildSetupGuide(inventory coreansible.InventoryResult) string { |
| 2698 | var b strings.Builder |
| 2699 | inventoryFile := defaultInventoryFilenameForResult(inventory) |
| 2700 | |
| 2701 | b.WriteString("[primary]Ansible SSH Setup Guide[-]\n\n") |
| 2702 | b.WriteString("1) Generate a dedicated SSH key (optional):\n") |
| 2703 | b.WriteString(" ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_pvetui -C \"pvetui-ansible\"\n\n") |
| 2704 | |
| 2705 | b.WriteString("2) Copy your key to a target host (example):\n") |
| 2706 | exampleUser := "ansible" |
| 2707 | exampleHost := "host.example.local" |
| 2708 | for _, host := range inventory.Hosts { |
| 2709 | user := strings.TrimSpace(host.Vars["ansible_user"]) |
| 2710 | target := strings.TrimSpace(host.Vars["ansible_host"]) |
| 2711 | if user == "" || target == "" { |
| 2712 | continue |
| 2713 | } |
| 2714 | exampleUser = user |
| 2715 | exampleHost = target |
| 2716 | break |
| 2717 | } |
| 2718 | _, _ = fmt.Fprintf(&b, " ssh-copy-id %s@%s\n", exampleUser, exampleHost) |
| 2719 | b.WriteString("\n") |
| 2720 | |
| 2721 | b.WriteString("3) Optional ansible.cfg defaults:\n") |
| 2722 | b.WriteString(" [defaults]\n") |
| 2723 | b.WriteString(" host_key_checking = True\n") |
| 2724 | b.WriteString(" timeout = 30\n") |
| 2725 | b.WriteString("\n") |
| 2726 | |
| 2727 | b.WriteString("4) Validate connectivity:\n") |
| 2728 | if coreansible.NormalizeInventorySource(inventory.Source) == coreansible.InventorySourceProxmox { |
| 2729 | b.WriteString(" export PROXMOX_PASSWORD=... # or PROXMOX_TOKEN_ID / PROXMOX_TOKEN_SECRET\n") |
| 2730 | } |
| 2731 | _, _ = fmt.Fprintf(&b, " ansible -i ./%s all -m ping\n\n", inventoryFile) |
| 2732 | |
| 2733 | b.WriteString("5) Example run:\n") |
| 2734 | _, _ = fmt.Fprintf(&b, " ansible-playbook -i ./%s site.yml\n\n", inventoryFile) |
| 2735 | |
| 2736 | b.WriteString("[secondary]Press esc/backspace/q to close[-]") |
| 2737 | |
| 2738 | return b.String() |
| 2739 | } |
| 2740 | |
| 2741 | func formatCommandResult(result coreansible.CommandResult) string { |
| 2742 | var b strings.Builder |
no test coverage detected