summaryrefslogtreecommitdiffstats
path: root/deploy/compass_conf/flavor_metadata/ansible-kubernetes.conf
blob: f878d58c68bb134e4264f4cdf501801691620b63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ADAPTER = 'kubernetes'
FLAVOR = 'ansible-kubernetes'
METADATA = {
    'ha_proxy': {
        '_self': {
        },
        'vip': {
            '_self': {
                'is_required': True,
                'field': 'general',
                'mapping_to': 'ha_vip'
            }
        },
        'test': {
            '_self': {
            },
        }
    }
}
Function.Magic */ .highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ .highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ .highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
# Copyright (c) 2017 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
- hosts: jumphost

  vars:
    boot_modes:
      'amd64': disk1
      'arm64': uefi1
    boot_mode: "{{ boot_modes[YARD_IMG_ARCH] }}"
    image_filename: "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}-{{ boot_mode }}.img"
    image_path: "{{ release }}/current/{{ image_filename }}"
    host: "{{ lookup('env', 'HOST')|default('cloud-images.ubuntu.com', true)}}"
    image_url: "{{ lookup('env', 'IMAGE_URL')|default('https://' ~ host ~ '/' ~ image_path, true) }}"
    image_dest: "{{ workspace }}/{{ image_filename }}"
    sha256sums_path: "{{ release }}/current/SHA256SUMS"
    sha256sums_filename: "{{ sha256sums_path|basename }}"
    sha256sums_url: "{{ lookup('env', 'SHA256SUMS_URL')|default('https://' ~ host ~ '/' ~ sha256sums_path, true) }}"

    workspace: "{{ lookup('env', 'workspace')|default('/tmp/workspace/yardstick', true) }}"
    raw_imgfile_basename: "yardstick-{{ release }}-server.raw"
    growpart_package:
      RedHat: cloud-utils-growpart
      Debian: cloud-guest-utils
  environment:
    - PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
    - "{{ proxy_env }}"

  tasks:
    - group_by:
        key: image_builder

    - package: name=parted state=present
    - package: name=kpartx state=present
    - package: name="{{ growpart_package[ansible_os_family] }}" state=present

    - set_fact:
        imgfile: "{{ normal_image_file }}"
      when: img_property == "normal"

    - set_fact:
        imgfile: "{{ nsb_image_file }}"
      when: img_property == "nsb"

    - set_fact:
        mountdir: "{{ lookup('env', 'mountdir')|default('/mnt/yardstick', true) }}"

    - set_fact:
        raw_imgfile: "{{ workspace }}/{{ raw_imgfile_basename }}"

    # cleanup non-lxd
    - name: unmount all old mount points
      mount:
        name: "{{ item }}"
        state: unmounted
      with_items:
        # order matters
        - "{{ mountdir }}/proc"
        - "{{ mountdir }}"
        - "/mnt/{{ release }}"

    - name: kpartx -dv to delete all image partition device nodes
      command: kpartx -dv "{{ raw_imgfile }}"
      ignore_errors: true

    - name: Debug dump loop devices
      command: losetup -a
      ignore_errors: true

    - name: delete loop devices for image file
      # use this because kpartx -dv will fail if raw_imgfile was delete
      # but in theory we could have deleted file still attached to loopback device?
      # use grep because of // and awk
      shell: losetup -O NAME,BACK-FILE | grep "{{ raw_imgfile_basename }}" | awk '{ print $1 }' | xargs -l1 losetup -v -d
      ignore_errors: true

    - name: Debug dump loop devices again
      command: losetup -a
      ignore_errors: true

    - name: delete {{ raw_imgfile }}
      file:
        path: "{{ raw_imgfile }}"
        state: absent

    # common
    - name: remove {{ mountdir }}
      file:
        path: "{{ mountdir }}"
        state: absent

    # download-common
    - name: remove {{ workspace }}
      file:
        path: "{{ workspace }}"
        state: directory

    - name: "fetch {{ image_url }} and verify "
      fetch_url_and_verify:
        url: "{{ image_url }}"
        sha256url: "{{ sha256sums_url }}"
        dest: "{{ image_dest }}"

    - name: convert image to raw
      command: "qemu-img convert {{ image_dest }} {{ raw_imgfile }}"

    - name: resize image to allow for more VNFs
      command: "qemu-img resize -f raw {{ raw_imgfile }} +2G"

    - name: resize parition to allow for more VNFs
      # use growpart because maybe it handles GPT better than parted
      command: growpart {{ raw_imgfile }}  1

    - name: create mknod devices in chroot
      command: "mknod -m 0660 /dev/loop{{ item }} b 7 {{ item }}"
      args:
        creates: "/dev/loop{{ item }}"
      with_sequence: start=0 end=9
      tags: mknod_devices

    - name: find first partition device
      command: kpartx -l "{{ raw_imgfile }}"
      register: kpartx_res

    - set_fact:
        image_first_partition: "{{ kpartx_res.stdout_lines[0].split()[0] }}"

    - set_fact:
        # assume / is the first partition
        image_first_partition_device: "/dev/mapper/{{ image_first_partition }}"

    - name: use kpartx to create device nodes for the raw image loop device
      # operate on the loop device to avoid /dev namespace missing devices
      command: kpartx -avs "{{ raw_imgfile }}"

    - name: parted dump raw image
      command: parted "{{ raw_imgfile }}" print
      register: parted_res

    - debug:
        var: parted_res
        verbosity: 2

    - name: use blkid to find filesystem type of first partition device
      command: blkid -o value -s TYPE {{ image_first_partition_device }}
      register: blkid_res

    - set_fact:
        image_fs_type: "{{ blkid_res.stdout.strip() }}"
    - fail:
        msg: "We only support ext4 image filesystems because we have to resize"
      when: image_fs_type != "ext4"

    - name: fsck the image filesystem
      command: "e2fsck -y -f {{ image_first_partition_device  }}"

    - name: resize filesystem to full partition size
      command: resize2fs {{ image_first_partition_device }}

    - name: fsck the image filesystem
      command: "e2fsck -y -f {{ image_first_partition_device  }}"

    - name: make tmp disposable fstab
      command: mktemp --tmpdir fake_fstab.XXXXXXXXXX
      register: mktemp_res

    - set_fact:
        fake_fstab: "{{ mktemp_res.stdout.strip() }}"

    - name: mount first parition on image device
      mount:
        src: "{{ image_first_partition_device }}"
        name: "{{ mountdir }}"
        # fstype is required
        fstype: "{{ image_fs_type }}"
        # !!!!!!! this is required otherwise we add entries to /etc/fstab
        # and prevent the system from booting
        fstab: "{{ fake_fstab }}"
        state: mounted

    - name: mount chroot /proc
      mount:
        src: none
        name: "{{ mountdir }}/proc"
        fstype: proc
        # !!!!!!! this is required otherwise we add entries to /etc/fstab
        # and prevent the system from booting
        fstab: "{{ fake_fstab }}"
        state: mounted

    - name: if arm copy qemu-aarch64-static into chroot
      copy:
        src: /usr/bin/qemu-aarch64-static
        dest: "{{ mountdir }}/usr/bin"
      when: 'YARD_IMG_ARCH == "arm64"'

    - name: create ubuntu policy-rc.d workaround
      copy:
        content: "{{ '#!/bin/sh\nexit 101\n' }}"
        dest: "{{ mountdir }}/usr/sbin/policy-rc.d"
        mode: 0755
      when: "target_os == 'Ubuntu'"

    - name: add chroot as host
      add_host:
        name: "{{ mountdir }}"
        groups: chroot_image,image_builder
        connection: chroot
        ansible_python_interpreter: /usr/bin/python3
        # set this host variable here
        nameserver_ip: "{{ ansible_dns.nameservers[0] }}"
        image_type: vm

- name: include ubuntu_server_cloudimg_modify.yml
  include: ubuntu_server_cloudimg_modify.yml
  when: img_property == "normal"

- name: include ubuntu_server_cloudimg_modify_samplevnfs.yml
  include: ubuntu_server_cloudimg_modify_samplevnfs.yml
  when: img_property == "nsb"

- hosts: localhost
  tasks:
    - name: convert image to image file
      command: "qemu-img convert -c -o compat=0.10 -O qcow2 {{ raw_imgfile }} {{ imgfile }}"

- name: run post build tasks
  include: post_build_yardstick_image.yml

- hosts: localhost

  tasks:
    - debug:
        msg: "yardstick image = {{ imgfile }}"