Run chartmuseum as a docker container 92/117792/1
authorBartek Grzybowski <b.grzybowski@partner.samsung.com>
Fri, 12 Feb 2021 13:03:54 +0000 (14:03 +0100)
committerBartek Grzybowski <b.grzybowski@partner.samsung.com>
Fri, 12 Feb 2021 13:19:43 +0000 (14:19 +0100)
A docker container for chartmuseum is run with chart
storage volume mounted from hosts' resource dir for chart
repo persistence across container/infra restarts.

Change-Id: I692ff7a3d95414b439b15b5414bc8b959eb79414
Issue-ID: OOM-2665
Signed-off-by: Bartek Grzybowski <b.grzybowski@partner.samsung.com>
17 files changed:
ansible/group_vars/infrastructure.yml
ansible/infrastructure.yml
ansible/rke.yml
ansible/roles/chartmuseum/defaults/main.yml
ansible/roles/chartmuseum/handlers/main.yml [new file with mode: 0644]
ansible/roles/chartmuseum/molecule/default/Dockerfile.j2 [deleted file]
ansible/roles/chartmuseum/molecule/default/molecule.yml
ansible/roles/chartmuseum/molecule/default/prepare.yml
ansible/roles/chartmuseum/molecule/default/tests/test_default.py
ansible/roles/chartmuseum/molecule/ubuntu/molecule.yml
ansible/roles/chartmuseum/tasks/main.yml
ansible/test/play-infrastructure/molecule/default/prepare.yml
ansible/test/play-rke/molecule/default/prepare.yml
ansible/test/roles/prepare-chartmuseum/tasks/main.yml
build/data_lists/infra_bin_utils.list
build/data_lists/infra_docker_images.list
build/package.py

index 12d1044..586f792 100755 (executable)
@@ -26,3 +26,4 @@ vnc_server_image: consol/ubuntu-icewm-vnc:1.4.0
 nexus3_image: sonatype/nexus3:3.15.2
 dns_server_image: andyshinn/dnsmasq:2.76
 nginx_server_image: own_nginx:2.0.0
+chartmuseum_server_image: chartmuseum/chartmuseum
index 2322c8b..27d9d76 100644 (file)
@@ -16,6 +16,8 @@
     - nginx
     - chrony
     - nexus
+    - role: chartmuseum
+      when: helm_version | regex_search("^v3" )
 
 - name: Setup base for Kubernetes nodes
   hosts: kubernetes:!infrastructure
index 46f4e3a..ab6c0bb 100644 (file)
@@ -31,5 +31,3 @@
         mode: deploy
     - kubectl
     - helm
-    - role: chartmuseum
-      when: helm_version | regex_search("^v3" )
index 6816d15..1d3ae1b 100644 (file)
@@ -1,3 +1,4 @@
 ---
+chartmuseum_server_image_tar: "{{ chartmuseum_server_image | regex_replace('(\\/|\\:)', '_') }}.tar"
 chartmuseum_port: "8879"
 chartmuseum_storage_dir: "{{ app_data_path }}/chartmuseum"
diff --git a/ansible/roles/chartmuseum/handlers/main.yml b/ansible/roles/chartmuseum/handlers/main.yml
new file mode 100644 (file)
index 0000000..867aaf0
--- /dev/null
@@ -0,0 +1,14 @@
+---
+- name: Run chartmuseum server container
+  docker_container:
+    name: chartmuseum
+    image: "{{ chartmuseum_server_image }}"
+    env:
+      STORAGE: "local"
+      STORAGE_LOCAL_ROOTDIR: "/charts"
+    volumes:
+      - "{{ chartmuseum_storage_dir }}:/charts:rw"
+    ports:
+      - "{{ chartmuseum_port }}:8080/tcp"
+    restart_policy: unless-stopped
+    recreate: true
diff --git a/ansible/roles/chartmuseum/molecule/default/Dockerfile.j2 b/ansible/roles/chartmuseum/molecule/default/Dockerfile.j2
deleted file mode 100644 (file)
index e6aa95d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# Molecule managed
-
-{% if item.registry is defined %}
-FROM {{ item.registry.url }}/{{ item.image }}
-{% else %}
-FROM {{ item.image }}
-{% endif %}
-
-RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
-    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \
-    elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
-    elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \
-    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
-    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi
index 07652b7..9c5d1c2 100644 (file)
@@ -7,7 +7,12 @@ lint:
   name: yamllint
 platforms:
   - name: instance-chartmuseum
-    image: centos:7
+    image: molecule-${PREBUILD_PLATFORM_DISTRO:-centos}:${PREBUILD_DISTRO_VERSION:-centos7.6}
+    pre_build_image: True
+    privileged: true
+    override_command: False
+    volumes:
+      - /var/lib/docker
     groups:
       - infrastructure
 provisioner:
@@ -18,13 +23,8 @@ provisioner:
     ANSIBLE_ROLES_PATH: ../../../../test/roles
     ANSIBLE_LIBRARY: ../../../../library
   inventory:
-    group_vars:
-      all:
-        app_name: moleculetestapp
-        app_data_path: "/opt/{{ app_name }}"
-        helm_bin_dir: /usr/local/bin
-        chartmuseum_storage_dir: "/opt/{{ app_name }}/chartmuseum"
-        chartmuseum_port: "1234"
+    links:
+      group_vars: ../../../../group_vars
 scenario:
   name: default
 verifier:
index 5201bce..dee6a97 100644 (file)
@@ -1,5 +1,8 @@
 ---
 - name: Prepare infra
   hosts: infrastructure
+  vars_files:
+    - ../../../../roles/chartmuseum/defaults/main.yml
   roles:
+    - prepare-docker-dind
     - prepare-chartmuseum
index 71d1978..4077306 100644 (file)
@@ -6,11 +6,9 @@ testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
     os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
 
 
-def test_chartmuseum(host):
-    ansible_vars = host.ansible.get_variables()
-    p = host.process.get(comm="chartmuseum")
-    assert 'chartmuseum --storage local --storage-local-rootdir /opt/' +\
-           ansible_vars['app_name'] + '/chartmuseum -port ' +\
-           ansible_vars['chartmuseum_port'] in p.args
-    assert host.file("/opt/" + ansible_vars['app_name'] +
-           "/chartmuseum").is_directory
+def test_chartmuseum_dir(host):
+    assert host.file("/chartmuseum").is_directory
+
+
+def test_container_running(host):
+    assert host.docker('chartmuseum').is_running
index d2851cc..5f351a9 100644 (file)
@@ -7,8 +7,12 @@ lint:
   name: yamllint
 platforms:
   - name: instance-ubuntu-chartmuseum
-    image: ubuntu:18.04
-    dockerfile: ../default/Dockerfile.j2
+    image: molecule-${PREBUILD_PLATFORM_DISTRO:-ubuntu}:${PREBUILD_DISTRO_VERSION:-18.04}
+    pre_build_image: True
+    privileged: true
+    override_command: False
+    volumes:
+      - /var/lib/docker
     groups:
       - infrastructure
 provisioner:
@@ -19,13 +23,8 @@ provisioner:
     ANSIBLE_ROLES_PATH: ../../../../test/roles
     ANSIBLE_LIBRARY: ../../../../library
   inventory:
-    group_vars:
-      all:
-        app_name: moleculetestapp
-        app_data_path: "/opt/{{ app_name }}"
-        helm_bin_dir: /usr/local/bin
-        chartmuseum_storage_dir: "/opt/{{ app_name }}/chartmuseum"
-        chartmuseum_port: "1234"
+    links:
+      group_vars: ../../../../group_vars
   playbooks:
     prepare: ../default/prepare.yml
     converge: ../default/playbook.yml
index c5d63a5..16e4102 100644 (file)
@@ -1,24 +1,14 @@
 ---
-- name: Install chartmuseum
-  copy:
-    src: "{{ app_data_path }}/downloads/chartmuseum"
-    dest: "{{ helm_bin_dir }}"
-    remote_src: true
-    mode: 0755
-
 - name: Create storage directory for chartmuseum
   file:
     path: "{{ chartmuseum_storage_dir }}"
     state: directory
+    mode: 0777
 
-- name: Run Helm chart repository
-  shell: "{{ helm_bin_dir }}/chartmuseum --storage local --storage-local-rootdir {{ chartmuseum_storage_dir }} -port {{ chartmuseum_port }} > /dev/null 2>&1 &"
-  async: 10
-  poll: 3
-  changed_when: false
-
-- name: Check Helm chart repository is running
-  command: pgrep chartmuseum
-  changed_when: false
-  register: pgrep_out
-  failed_when: pgrep_out.rc != 0
+- name: Load chartmuseum server image
+  docker_image:
+    name: "{{ chartmuseum_server_image }}"
+    load_path: "{{ infra_images_path }}/{{ chartmuseum_server_image_tar }}"
+    state: present
+    timeout: 120
+  notify: Run chartmuseum server container
index 86e25b4..634234a 100644 (file)
@@ -9,12 +9,14 @@
     - prepare-nexus
     - prepare-dns
     - prepare-firewall
+    - prepare-chartmuseum
   vars_files:
     - vars.yml
     - ../../../../roles/nginx/defaults/main.yml
     - ../../../../roles/vncserver/defaults/main.yml
     - ../../../../roles/nexus/defaults/main.yml
     - ../../../../roles/dns/defaults/main.yml
+    - ../../../../roles/chartmuseum/defaults/main.yml
 
 - name: Prepare kubernetes
   hosts: kubernetes
index 789a940..6d81005 100644 (file)
@@ -19,5 +19,3 @@
         mode: infra
     - prepare-kubectl
     - prepare-helm
-    - role: prepare-chartmuseum
-      when: helm_version | regex_search("^v3" )
index b0bb5d1..a46888e 100644 (file)
@@ -1,12 +1,18 @@
 ---
-- name: "Ensure {{ app_data_path }}/downloads directory exists"
+- name: "Create chartmuseum image storage dir"
   file:
-    path: "{{ app_data_path }}/downloads"
-    recurse: true
+    path: "{{ infra_images_path }}"
     state: directory
+    mode: "u+rw,g+wx,o+rwx"
+    recurse: true
+
+- name: Download and archive chartmuseum docker image
+  delegate_to: localhost
+  docker_image:
+    name: "{{ chartmuseum_server_image }}"
+    archive_path: /tmp/chartmuseum.tar
 
-- name: "Download chartmuseum"
-  get_url:
-    url: "https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum"
-    dest: "{{ app_data_path }}/downloads"
-    remote_src: true
+- name: Copy chartmuseum image to node
+  copy:
+    src: /tmp/chartmuseum.tar
+    dest: "{{ infra_images_path }}/{{ chartmuseum_server_image_tar }}"
index 614d1c1..3beb297 100644 (file)
@@ -3,4 +3,3 @@ https://get.helm.sh/helm-v2.16.6-linux-amd64.tar.gz
 https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz
 https://github.com/chartmuseum/helm-push/releases/download/v0.9.0/helm-push_0.9.0_linux_amd64.tar.gz
 https://github.com/rancher/rke/releases/download/v1.0.4/rke_linux-amd64
-https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum
index 78081cc..43b2f86 100644 (file)
@@ -1,3 +1,4 @@
 andyshinn/dnsmasq:2.76
 consol/ubuntu-icewm-vnc:1.4.0
 sonatype/nexus3:3.15.2
+chartmuseum/chartmuseum
index 9cd3590..ce603be 100755 (executable)
@@ -246,7 +246,6 @@ def build_offline_deliverables(build_version,
         bin_pattern_list = ['**/rke_linux-amd64',
                             '**/helm-*-linux-amd64.tar.gz',
                             '**/kubectl',
-                            '**/amd64/chartmuseum',
                             '**/helm-push_*_linux_amd64.tar.gz']
 
         for pattern in bin_pattern_list: