diff options
-rw-r--r-- | bootstrap/codesearch/Vagrantfile | 38 | ||||
-rwxr-xr-x | bootstrap/codesearch/create_config.py | 39 |
2 files changed, 54 insertions, 23 deletions
diff --git a/bootstrap/codesearch/Vagrantfile b/bootstrap/codesearch/Vagrantfile index 0407a57b5..774a02134 100644 --- a/bootstrap/codesearch/Vagrantfile +++ b/bootstrap/codesearch/Vagrantfile @@ -5,6 +5,12 @@ host_ip = "192.168.121.1" synced_folder = "/vagrant" houndd_bin = "${HOME}/go/bin/houndd" houndd_config = "${HOME}/config.json" +key_file = "${HOME}/.ssh/id_rsa" +api_base = "https://gerrit.onap.org/r" +api_user = ENV.fetch('API_USER') { |user| abort("missing env: #{user}") } +api_key = ENV.fetch('API_KEY') { |key| abort("missing env: #{key}") } +onap_git = "git.onap.org" +gerrit_port = "29418" $replace_dns = <<-SCRIPT HOST_IP="$1" @@ -12,11 +18,35 @@ $replace_dns = <<-SCRIPT echo nameserver "$HOST_IP" | tee /etc/resolv.conf SCRIPT +$generate_key = <<-SCRIPT + KEY_FILE="$1" + echo "Generating SSH key (${KEY_FILE})" + ssh-keygen -q -b 4096 -t rsa -f "$KEY_FILE" -N "" +SCRIPT + +$upload_key = <<-SCRIPT + KEY_FILE="$1" + API_BASE="$2" + echo "Uploading SSH pubkey (${KEY_FILE}.pub) for user: ${API_USER}" + curl -sS \ + -u "${API_USER}:${API_KEY}" \ + -d "@${KEY_FILE}.pub" \ + -H "Content-Type: text/plain" \ + -X POST "${API_BASE}/a/accounts/${API_USER}/sshkeys" +SCRIPT + Vagrant.configure("2") do |config| config.vm.box = "generic/ubuntu1804" config.vm.synced_folder ".", synced_folder, type: "rsync", rsync__exclude: "Vagrantfile" config.vm.network "forwarded_port", guest: 6080, host: 6080 config.vm.provision "replace_dns", type: :shell, run: "always", inline: $replace_dns, args: host_ip + config.vm.provision "generate_key", type: :shell, privileged: false, inline: $generate_key, args: key_file + config.vm.provision "upload_key", type: :shell do |s| + s.privileged = false + s.inline = $upload_key + s.args = [key_file, api_base] + s.env = {'API_USER': api_user, 'API_KEY': api_key} + end config.vm.provision "dependencies", type: :shell, inline: <<-SHELL export DEBIAN_FRONTEND=noninteractive apt-get update @@ -26,9 +56,11 @@ Vagrant.configure("2") do |config| export GOPATH="${HOME}/go" go get -u github.com/hound-search/hound/cmds/... SHELL - config.vm.provision "generate_config", type: :shell, privileged: false, inline: <<-SHELL - python3 #{synced_folder}/create_config.py > #{houndd_config} - SHELL + config.vm.provision "generate_config", type: :shell do |s| + s.privileged = false + s.inline = "python3 #{synced_folder}/create_config.py --ssh ${1} ${2} --git ${3} > #{houndd_config}" + s.args = [api_user, gerrit_port, onap_git] + end config.vm.provision "run_codesearch", type: :shell, privileged: false, inline: <<-SHELL tmux new -d -s codesearch #{houndd_bin} -conf #{houndd_config} SHELL diff --git a/bootstrap/codesearch/create_config.py b/bootstrap/codesearch/create_config.py index aef99e778..115b4672b 100755 --- a/bootstrap/codesearch/create_config.py +++ b/bootstrap/codesearch/create_config.py @@ -8,8 +8,8 @@ import json import urllib.request import sys -DEFAULT_GERRIT = "https://gerrit.onap.org/r" -DEFAULT_GIT = "https://git.onap.org" +DEFAULT_GERRIT = "gerrit.onap.org" +API_PREFIX = "/r" API_PROJECTS = "/projects/" MAGIC_PREFIX = ")]}'" @@ -20,7 +20,7 @@ GIT_ANCHOR = "#n{line}" def get_projects_list(gerrit): """Request list of all available projects from ONAP Gerrit.""" - resp = urllib.request.urlopen(gerrit + API_PROJECTS) + resp = urllib.request.urlopen("https://{}{}{}".format(gerrit, API_PREFIX, API_PROJECTS)) resp_body = resp.read() no_magic = resp_body[len(MAGIC_PREFIX):] @@ -30,23 +30,23 @@ def get_projects_list(gerrit): return projects.keys() -def create_repos_list(projects, gitweb, git, gerrit): +def create_repos_list(projects, gerrit, ssh, git): """Create a map of all projects to their repositories' URLs.""" - gerrit_project_url = "{}/{}.git" - gitweb_code_url = "{}/gitweb?p={}.git;hb=HEAD;a=blob;f={{path}}{{anchor}}" - - git_project_url = "{}/{}" - git_code_url = "{url}/tree/{path}{anchor}" + gerrit_url = "https://{}{}".format(gerrit, API_PREFIX) + gerrit_project_url = "{}/{{}}.git".format(gerrit_url) + gitweb_code_url = "{}/gitweb?p={{}}.git;hb=HEAD;a=blob;f={{path}}{{anchor}}".format(gerrit_url) repos_list = {} for project in projects: - if gitweb: - project_url = gerrit_project_url.format(gerrit, project) - code_url = gitweb_code_url.format(gerrit, project) - anchor = GITWEB_ANCHOR - else: - project_url = git_project_url.format(git, project) - code_url = git_code_url + project_url = gerrit_project_url.format(project) + code_url = gitweb_code_url.format(project) + anchor = GITWEB_ANCHOR + + if ssh and len(ssh) == 2: + user, port = ssh[0], ssh[1] + project_url = "ssh://{}@{}:{}/{}.git".format(user, gerrit, port, project) + if git: + code_url = "https://{}/{}/tree/{{path}}{{anchor}}".format(git, project) anchor = GIT_ANCHOR repos_list[project] = { @@ -64,9 +64,8 @@ def parse_arguments(): """Return parsed command-line arguments.""" parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--gerrit', help='Gerrit address', default=DEFAULT_GERRIT) - access = parser.add_mutually_exclusive_group() - access.add_argument('--gitweb', help='use Gerrit\'s gitweb (bool)', action='store_true') - access.add_argument('--git', help='use external git (address)', default=DEFAULT_GIT) + parser.add_argument('--ssh', help='SSH information: user, port', nargs=2) + parser.add_argument('--git', help='external git address') return parser.parse_args() @@ -76,7 +75,7 @@ def main(): arguments = parse_arguments() projects = get_projects_list(arguments.gerrit) - repos = create_repos_list(projects, arguments.gitweb, arguments.git, arguments.gerrit) + repos = create_repos_list(projects, arguments.gerrit, arguments.ssh, arguments.git) config = { "max-concurrent-indexers": 2, "dbpath": "data", |