lib/takeltau/ship/project/start.rb in takeltau-0.44.2 vs lib/takeltau/ship/project/start.rb in takeltau-0.44.8

- old
+ new

@@ -2,46 +2,77 @@ # tau ship project start module ShipProjectStart # Start a takelship def ship_project_start(project) - return false if _docker_container_lib_check_matrjoschka + return false unless _ship_project_start_prerequisites_fulfilled? - return false if ship_container_check_existing - takelship = _ship_info_lib_get_takelshipinfo - project = _ship_info_lib_get_project(project, takelship) + project = _ship_info_lib_get_project project, takelship - return false unless _ship_info_lib_valid_project? takelship, project + return false unless _ship_project_start_valid_project? takelship, project + ports = _ship_ports_lib_get_ports(takelship, project) + + log.debug 'Writing port configuration to takelage.yml' + _ship_ports_lib_write_ports(ports, project) + log.debug "Starting takelship project \"#{project}\"" - ports = _ship_project_start_ports takelship, project - say _ship_container_lib_docker_privileged ports, project + _ship_container_lib_docker_privileged ports, project + + _ship_project_start_print_ports project, ports end private - # Get takelship ports - # rubocop:disable Metrics/MethodLength - # rubocop:disable Metrics/AbcSize - def _ship_project_start_ports(takelship, project) - ports = [] - takelship['projects'].each do |takelship_project| - next unless project == takelship_project['name'] + # check prerequisistes + def _ship_project_start_prerequisites_fulfilled? + if _docker_container_lib_check_matrjoschka + say 'Cannot start a takelship from within a takelage container!' + return false + end - takelship_project['services'].each do |service| - next unless service.key?('ports') + if ship_container_check_existing + say "Container \"#{_ship_container_lib_ship_hostname}\" is already started!" + return false + end - service['ports'].each do |port| - ports << port['port'] - end - end + true + end + + # check if the project is a valid takelship project + def _ship_project_start_valid_project?(takelship, project) + return true if _ship_info_lib_valid_project? takelship, project + + say 'No valid project found!' + false + end + + # print ports after starting a takelship + def _ship_project_start_print_ports(project, ports) + output = [] + output << "Started takelship project \"#{project}\"\n" + max_length = _ship_project_start_get_maxlength ports + + ports.each_value do |port| + next unless port['localhost'].to_i.between? 1, 65_535 + + left = "localhost:#{port['localhost']}" + right = "(#{port['service']} #{port['protocol']})" + output << "#{left.ljust(max_length)} #{right}" end - if config.active['ship_port_expose_podman_socket'] == 'true' - log.debug "Add DOCKER_HOST port #{config.active['ship_docker_host']}" - ports << config.active['ship_docker_host'] + output.join("\n") + end + + # get max length of left column + def _ship_project_start_get_maxlength(ports) + max_length = 0 + ports.each_value do |port| + localport = port['localhost'] + next unless localport.to_i.between? 1, 65_535 + + left_string = "localhost:#{localport}" + max_length = left_string.length if max_length < left_string.length end - ports + max_length end end -# rubocop:enable Metrics/AbcSize -# rubocop:enable Metrics/MethodLength