Skip to content
This repository has been archived by the owner on Jul 27, 2023. It is now read-only.

Add new partitioner script, which can do job on first boot #1239

Merged
merged 34 commits into from
Apr 28, 2016
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
c721871
Add docker options template
stevendborrelli Mar 15, 2016
3f3db8c
Update docker options to be a list
stevendborrelli Mar 15, 2016
55dd10b
Add network docker options systemd drop-in
stevendborrelli Mar 15, 2016
12c4164
Add drop-in for docker ExecStart
stevendborrelli Mar 15, 2016
f6a7ff6
Add docker yum repo file
stevendborrelli Mar 15, 2016
412d8fa
Update to use mantl-storage-setup
stevendborrelli Mar 15, 2016
a920f7f
Add docker storage template
stevendborrelli Mar 15, 2016
2359ba4
Add mantl volume configuration
stevendborrelli Mar 15, 2016
a2b1d20
Add docker storage setup
stevendborrelli Mar 15, 2016
9bd8f07
Refactor storage to use mantl-storage-setup
stevendborrelli Mar 15, 2016
3609656
Update comments
stevendborrelli Mar 16, 2016
67a4cc2
Save VG name as fact
stevendborrelli Mar 16, 2016
6289790
Add storage options to docker
stevendborrelli Mar 16, 2016
af00466
Add docker storage drop in
stevendborrelli Mar 16, 2016
924b941
Merge branch 'master' into feature/docker-refactor
stevendborrelli Mar 28, 2016
f692f4d
Add new partitioner script, which can do job on first boot
avnik Mar 7, 2016
16e205c
Fix boot order
avnik Mar 8, 2016
b68eb8f
Add rudimentary config writting support
avnik Mar 10, 2016
f901abc
Migrate to docker.io's docker package
avnik Mar 10, 2016
d13691e
Simplify code
avnik Mar 21, 2016
6356491
Devicemapper support
avnik Mar 24, 2016
9406ded
Fixed pool name for devicemapper
avnik Mar 30, 2016
6d9e983
Upgrade path for docker/docker-engine
avnik Mar 30, 2016
d7df323
Restore service enabling, which lost in rebase
avnik Mar 30, 2016
8c380f3
rename variables from DOCKER_ to MANTL_
avnik Mar 30, 2016
3e7a50d
Document new options
avnik Apr 5, 2016
d114201
Add documentation for new partitioner
avnik Apr 6, 2016
f71a577
Note about docker_source variable
avnik Apr 6, 2016
a42735d
remove duplicating docker-io repo
avnik Apr 6, 2016
fa19252
Add Docker gc package
stevendborrelli Apr 13, 2016
1f795f2
Use same paths as packaged mantl-storage-setup
avnik Apr 19, 2016
5271aa6
docker: Install docker-gc after lvm stuff
avnik Apr 25, 2016
afa8619
docker: Install package after systemd drop-ins added
avnik Apr 26, 2016
af414dd
Explicit process with mantl-storage-setup
avnik Apr 26, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 11 additions & 0 deletions roles/docker/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@ dependencies into a standardized unit for software development." Their site has
Mantl to ship units of work around the cluster, combined
with :doc:`marathon`'s scheduling.

Variables
---------

.. data :: docker_source

Specify origin of docker packages.

Possible values: ``docker``, ``redhat``.

Default: ``docker` -- using packages from ``Docker, inc``.

Using a private Docker registry
-------------------------------

Expand Down
30 changes: 28 additions & 2 deletions roles/docker/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,38 @@
# Where do we get docker packages from?
# values are redhat or docker
docker_package_source: docker

docker_package: '{% if docker_package_source == "docker" %}docker-engine{% else %}docker{% endif %}'

# inversion of docker_package for upgrade/transition code path
docker_package_to_remove: '{% if docker_package_source == "docker" %}docker{% else %}docker-engine{% endif %}'

do_private_docker_registry: false
docker_lvm_backed: "{% if provider in ['gce', 'openstack', 'aws'] %}True{% else %}False{% endif %}"

# Docker log options: See https://docs.docker.com/engine/admin/logging/overview/
docker_log_driver: journald

# Docker options
docker_options:
- "--dns {{ private_ipv4 }}"
- "--log-driver={{ docker_log_driver }}"
- "{% if docker_selinux_enabled %}--selinux-enabled {% endif %}"
- "{% if kube_build is defined %}--dns-search {{ cluster_name }}{% endif %}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is kube_build ever set anywhere?


# Docker network options can be provided as a list
docker_network_options:
- "-H unix:///var/run/docker.sock"
# If you want to open the docker API, uncomment the line below.
# Please note this is insecure
# - "-H tcp://0.0.0.0:2375"

# Possible values: overlay (default), devicemapper, btrfs (unsupported)
# Used with docker-storage-setup
docker_storage_driver: overlay

## Settings for devicemapper thinprovider

## Settings for devicemapper thinprovider (docker-storage-setup)
## These are not used for overlay on lvm
## Refer to commentaries in ../templates/docker-storage-setup.conf.j2
## or `man lvcreate` for acceptable sizes, and their syntax
docker_lvm_data_volume_size: 40%FREE
Expand Down
8 changes: 8 additions & 0 deletions roles/docker/files/20-ExecStart.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon $OPTIONS \
$MANTL_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY
6 changes: 6 additions & 0 deletions roles/docker/files/docker.repo
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[dockerrepo]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are 2 docker repos in the PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct, I'll remove mine

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This has been done.

name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
10 changes: 10 additions & 0 deletions roles/docker/tasks/lvm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,13 @@
tags:
- docker
- bootstrap

- name: configure lvm for docker
sudo: yes
template:
src: docker-volume.conf.j2
dest: /etc/mantl/filesystems.d/20-docker-volume.conf
mode: 0644
tags:
- docker
- disk
147 changes: 53 additions & 94 deletions roles/docker/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,105 +9,38 @@
- docker
- bootstrap

- name: install docker packages
sudo: yes
yum:
name: "{{ item }}"
state: present
with_items:
- docker
- docker-selinux
tags:
- docker
- bootstrap

- name: check if docker storage already set up with devicemapper
sudo: yes
shell: "test -f /etc/sysconfig/docker-storage-setup && . /etc/sysconfig/docker-storage-setup && echo ${STORAGE_DRIVER:-NOT_SET}"
register: docker_storage_already_set_up
tags:
- disk
- docker

- name: set docker_configure_lvm
set_fact:
docker_configure_lvm: '{{ docker_lvm_backed|bool and docker_storage_driver in ["btrfs", "overlay"] and docker_storage_already_set_up.stdout in ["NOT_SET", "btrfs", "overlay"] }}'
tags:
- disk
- docker

- name: create backing storage volume for docker storage
sudo: yes
lvol:
vg: "{{ volume_group_name }}"
lv: "{{ docker_volume_name }}"
size: "{{ docker_volume_size }}"
when: docker_configure_lvm|bool
tags:
- disk
- docker

- name: create backing storage filesystem for docker storage
- name: enable Docker, Inc. yum repo
sudo: yes
filesystem:
dev: "{{ docker_volume_device }}"
fstype: "{{ docker_volume_fs_type }}"
opts: "{{ docker_volume_fs_opts }}"
when: docker_configure_lvm|bool
tags:
- disk
- docker

- name: create mount point for docker storage
sudo: yes
file:
state: directory
name: "{{ docker_volume_mount }}"
mode: 0755
when: docker_configure_lvm|bool
copy:
src: docker.repo
dest: /etc/yum.repos.d/docker.repo
tags:
- disk
- docker
when: docker_package_source is defined and docker_package_source == "docker"

- name: mount docker storage
- name: remove old docker package
sudo: yes
mount:
state: mounted
name: "{{ docker_volume_mount }}"
fstype: "{{ docker_volume_fs_type }}"
src: "{{ docker_volume_device }}"
dump: 1
passno: 2
when: docker_configure_lvm|bool
yum:
name: "{{ item }}"
state: absent
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to stop/start docker during the removal/installation process?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Manual need restart on upgrade.
Currently docker have started=yes in ansible, and it need to be switchable off to packer

with_items:
- "{{ docker_package_to_remove }}"
- "{{ docker_package_to_remove }}-selinux"
tags:
- disk
- docker
- bootstrap

- name: setup docker storage
- name: install docker packages
sudo: yes
lineinfile:
dest: /etc/sysconfig/docker-storage-setup
regexp: "^{{ item.var }}=.*"
line: "{{ item.var }}={{ item.value }}"
yum:
name: "{{ item }}"
state: present
create: yes
with_items:
- var: STORAGE_DRIVER
value: "{{ docker_storage_driver }}"
- var: DATA_SIZE
value: "{{ docker_lvm_data_volume_size }}"
- var: VG
value: "{{ volume_group_name }}"
- var: MIN_DATA_SIZE
value: "{{ docker_lvm_data_volume_size_min }}"
- var: AUTO_EXTEND_POOL
value: "{{ docker_lvm_auto_extend_pool }}"
when: docker_lvm_backed|bool and docker_storage_already_set_up.stdout == "NOT_SET"
- "{{ docker_package }}"
- "{{ docker_package }}-selinux"
tags:
- docker

- include: lvm.yml
when: docker_lvm_backed|bool and provider!="bare-metal"
- bootstrap

- name: create rsyslog.d
sudo: yes
Expand All @@ -131,19 +64,41 @@
- docker


- name: configure docker consul dns
- name: create directory for systemd drop-ins
sudo: yes
lineinfile:
dest: /etc/sysconfig/docker
regexp: ^OPTIONS=
line: OPTIONS='{% if docker_selinux_enabled %}--selinux-enabled {% endif %}--dns {{ private_ipv4 }} --dns-search service.{{ consul_dns_domain }} {% if kube_build is defined %}--dns-search {{ cluster_name }}{% endif %} --log-driver=syslog'
state: present
create: yes
file:
path: /etc/systemd/system/docker.service.d
state: directory
mode: 0755
tags:
- docker

# Not restart docker on file drop
- name: systemd drop-in for options
sudo: yes
template:
src: "{{ item }}.j2"
dest: "/etc/systemd/system/docker.service.d/{{ item }}"
with_items:
- 10-options.conf
- 12-network-options.conf
- 14-storage-options.conf
notify:
- restart docker
- reload systemd
tags:
- docker

# Not restart docker on file drop
- name: systemd drop-in for ExecStart
sudo: yes
copy:
src: 20-ExecStart.conf.j2
dest: /etc/systemd/system/docker.service.d/20-ExecStart.conf
notify:
- reload systemd
tags:
- docker

- name: ensure docker config dir exists
sudo: yes
file:
Expand Down Expand Up @@ -172,6 +127,9 @@
- docker
- skip_ansible_lint

- include: lvm.yml
when: docker_lvm_backed|bool

- name: enable docker
sudo: yes
service:
Expand All @@ -181,3 +139,4 @@
tags:
- docker
- bootstrap # needed to install Docker images during bootstrap

3 changes: 3 additions & 0 deletions roles/docker/templates/10-options.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# /etc/systemd/systemd/docker.service.d/10-options.conf
[Service]
Environment='OPTIONS={{ docker_options | join (" ") }}'
3 changes: 3 additions & 0 deletions roles/docker/templates/12-network-options.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# /etc/systemd/systemd/docker.service.d/12-network-options.conf
[Service]
Environment='DOCKER_NETWORK_OPTIONS={{ docker_network_options | join (" ") }}'
3 changes: 3 additions & 0 deletions roles/docker/templates/14-storage-options.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# /etc/systemd/systemd/docker.service.d/14-storage-options.conf
[Service]
EnvironmentFile=/etc/sysconfig/mantl-storage
25 changes: 25 additions & 0 deletions roles/docker/templates/docker-volume.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{% if docker_lvm_backed|bool and docker_storage_driver in ["btrfs", "overlay"] %}
[volume:docker]
group = {{ volume_group_name }}
volume = {{ docker_volume_name }}
size = {{ docker_volume_size }}

[filesystem:docker]
dev = {{ docker_volume_device }}
fstype = {{ docker_volume_fs_type }}
mount = {{ docker_volume_mount }}
required_by = docker-storage-setup.service docker.service

[write:config]
file = /etc/sysconfig/mantl-storage
content = MANTL_STORAGE_OPTIONS=--storage-driver {{ docker_storage_driver }}
{% endif %}
{%if docker_lvm_backed|bool and docker_storage_driver == "devicemapper" %}
[thin:docker]
group = {{ volume_group_name }}
# Fixed volume name, to be compatible with docker-storage-setup
pool = docker-pool
size = {{ docker_lvm_data_volume_size }}
config = /etc/sysconfig/mantl-storage

{% endif %}
8 changes: 8 additions & 0 deletions roles/lvm/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,14 @@ Variables
- For GCE: /dev/disk/by-id/google-lvm
- For AWS: /dev/xvdh

.. debug_storage_setup:

Define source of partitioner script. If set to ``True`` then
``mantl-storage-setup`` script and associated files deployed from ansible tree,
otherwise it come with ``mantl-storage-setup`` package from Mantl repository.

default: ``False``

Facts
-----

Expand Down
2 changes: 2 additions & 0 deletions roles/lvm/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ lvm_physical_device: >
{%- elif provider == 'aws' -%}/dev/xvdh
{%- elif provider == 'openstack' -%}/dev/vdb
{%- endif -%}{%- endif -%}

debug_storage_setup: False