Skip to content

Commit f62d222

Browse files
dvictor1Jonas Fonseca
authored and
Jonas Fonseca
committed
mesos-agent: Support CentOS 6.5
Update the common, docker-engine and mesos roles to allow Mesos agents to be provisioned on CentOS. To test this, the third node in the Vagrant test cluster has been changed to run CentOS. Closes #13 by merging the remaining part of that PR.
1 parent d7d065d commit f62d222

File tree

14 files changed

+109
-34
lines changed

14 files changed

+109
-34
lines changed

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
Improvements:
66

7+
- mesos-agent: Support CentOS 6.5 with docker containerizer.
78
- Add support for Mesos agent and framework authentication.
89
- Enable HTTP authentication for Marathon and Chronos.
910

roles/common/defaults/main.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,10 @@
88
# - { ip: '52.7.220.1', name: 'docker-registry.example.org' }
99
# ```
1010
host_mappings: []
11+
12+
# EPEL repository released packaged per OS version
13+
epel_releases:
14+
'6': 'epel-release-6-8.noarch.rpm'
15+
16+
# EPEL repository URL
17+
epel_repo: "http://dl.fedoraproject.org/pub/epel/{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/{{ epel_releases[ansible_distribution_major_version] }}"

roles/common/tasks/Debian.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
- name: Update APT
3+
apt: update_cache=yes cache_valid_time=3600
4+
5+
- name: Install base packages
6+
apt: name={{item}} state=installed
7+
with_items:
8+
- curl
9+
- unzip
10+
- ca-certificates
11+
- software-properties-common

roles/common/tasks/main.yml

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
11
---
2-
- name: Update APT
3-
apt: update_cache=yes cache_valid_time=3600
4-
5-
- name: Install base packages
6-
apt: name={{item}} state=installed
7-
with_items:
8-
- curl
9-
- unzip
10-
- ca-certificates
11-
- software-properties-common
2+
- name: Conditionally install Debian packages
3+
include: Debian.yml
4+
when: ansible_os_family == "Debian"
125

136
- name: Update /etc/hosts to list all cluster nodes
147
template: src=etc-hosts.j2 dest=/etc/hosts mode=0644

roles/docker-engine/tasks/Debian.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
- name: Add Docker APT key
3+
apt_key: url="https://apt.dockerproject.org/gpg" id="58118E89F3A912897C070ADBF76221572C52609D" state=present
4+
5+
- name: Add Docker APT repo
6+
apt_repository: repo="deb https://apt.dockerproject.org/repo {{ ansible_distribution | lower }}-{{ ansible_distribution_release }} main" state=present
7+
8+
- name: Install docker
9+
apt: name=docker-engine

roles/docker-engine/tasks/RedHat.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
- name: Ensure that a newer version of device-mapper is available - https://github.com/docker/docker/issues/12108
3+
yum: name=device-mapper state=latest
4+
5+
- name: Add Docker repo
6+
template: src=etc-yum.repos.d-docker.repo.j2 dest=/etc/yum.repos.d/docker.repo mode=0644
7+
8+
- name: Install docker
9+
yum: name=docker-engine state=installed

roles/docker-engine/tasks/main.yml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
---
2-
- name: Add Docker APT key
3-
apt_key: url="https://apt.dockerproject.org/gpg" id="58118E89F3A912897C070ADBF76221572C52609D" state=present
2+
- name: Conditionally install Debian packages
3+
include: Debian.yml
4+
when: ansible_os_family == "Debian"
45

5-
- name: Add Docker APT repo
6-
apt_repository: repo="deb https://apt.dockerproject.org/repo ubuntu-{{ ansible_distribution_release }} main" state=present
6+
- name: Conditionally install RedHat packages
7+
include: RedHat.yml
8+
when: ansible_os_family == "RedHat"
79

8-
- name: Install docker - based on "https://get.docker.com/"
9-
apt: name=docker-engine
10+
- name: Start docker
11+
service: name=docker state=started enabled=yes
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[dockerrepo]
2+
name=Docker Repository
3+
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
4+
enabled=1
5+
gpgcheck=1
6+
gpgkey=https://yum.dockerproject.org/gpg

roles/mesos/defaults/main.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,16 @@ mesos_credentials:
1818
#
1919
# By default the values defined in `mesos_credentials` are used.
2020
mesos_http_credentials: "{{ mesos_credentials.principal }}:{{ mesos_credentials.secret }}"
21+
22+
## OS dependent configuration
23+
24+
mesos_dns_config_file:
25+
Debian: /etc/resolvconf/resolv.conf.d/head
26+
RedHat: /etc/resolv.conf
27+
28+
# Mesosphere released packaged per OS version
29+
mesosphere_releases:
30+
'6': 'mesosphere-el-repo-6-3.noarch.rpm'
31+
'7': 'mesosphere-el-repo-7-1.noarch.rpm'
32+
33+
mesosphere_repo: "http://repos.mesosphere.com/el/{{ ansible_distribution_major_version }}/noarch/RPMS/{{ mesosphere_releases[ansible_distribution_major_version] }}"

roles/mesos/handlers/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
---
22
- name: Regenerate /etc/resolv.conf
33
command: resolvconf -u
4+
when: ansible_os_family == "Debian"

roles/mesos/tasks/Debian.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
- name: Add Mesosphere APT key
3+
apt_key: keyserver=keyserver.ubuntu.com id=E56151BF state=present
4+
5+
- name: Add Mesosphere APT repo
6+
apt_repository: repo="deb http://repos.mesosphere.io/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} main" state=present
7+
8+
- name: Install Mesos package
9+
apt: name={{item}} state=installed
10+
with_items:
11+
- mesos={{mesos_version}}*
12+
13+
# The Mesos Debian package depends on Zookeeper, which we install in a separate
14+
# role. Since master nodes and agent nodes in particular can be configured to
15+
# not run Zookeeeper we disable the service explicitly.
16+
- name: Disable Zookeeper for non-zookeeper hosts
17+
service: name=zookeeper state=stopped enabled=no
18+
when: "'zookeeper' not in group_names"

roles/mesos/tasks/RedHat.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
- name: Add mesosphere repo
3+
yum: name={{mesosphere_repo}} state=present
4+
5+
- name: Install Mesos package
6+
yum: name={{item}} state=installed
7+
with_items:
8+
- mesos-{{mesos_version}}

roles/mesos/tasks/main.yml

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,19 @@
99
mesos_master_url: "http://{{ mesos_http_credentials }}@master.mesos:5050"
1010
marathon_url: "http://{{ mesos_http_credentials }}@marathon.mesos:8080"
1111

12-
- name: Add Mesosphere APT key
13-
apt_key: keyserver=keyserver.ubuntu.com id=E56151BF state=present
12+
- name: Conditionally install Debian packages
13+
include: Debian.yml
14+
when: ansible_os_family == "Debian"
1415

15-
- name: Add Mesosphere APT repo
16-
apt_repository: repo="deb http://repos.mesosphere.io/ubuntu/ trusty main" state=present
16+
- name: Conditionally install RedHat packages
17+
include: RedHat.yml
18+
when: ansible_os_family == "RedHat"
1719

1820
- name: Configure Mesos DNS
19-
lineinfile: dest=/etc/resolvconf/resolv.conf.d/head insertbefore="^nameserver.*" regexp=".*{{item}}$" line="nameserver {{item}}" state=present
21+
lineinfile: dest={{mesos_dns_config_file[ansible_os_family]}} insertbefore="^nameserver.*" regexp=".*{{item}}$" line="nameserver {{item}}" state=present
2022
with_items: groups['mesos-dns']
2123
notify: Regenerate /etc/resolv.conf
2224

23-
- name: Install Mesos package
24-
apt: name={{item}} state=installed
25-
with_items:
26-
- mesos={{mesos_version}}*
27-
28-
- name: Disable Zookeeper
29-
service: name=zookeeper state=stopped enabled=no
30-
when: "'zookeeper' not in group_names"
31-
3225
# The Mesos package installs both the master and agent. Make the Mesos services
3326
# match those of the roles.
3427
- name: Disable Mesos Master for non-master hosts

vagrant/Vagrantfile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22
# vi: set ft=ruby :
33

44
nodes = [
5-
{ :name => 'mesos-node-0', :ip => '10.141.141.10', :mem => 1024, :cpus => 1 },
6-
{ :name => 'mesos-node-1', :ip => '10.141.141.11', :mem => 4096, :cpus => 1 },
7-
{ :name => 'mesos-node-2', :ip => '10.141.141.12', :mem => 1024, :cpus => 1 }
5+
{ :name => 'mesos-node-0', :ip => '10.141.141.10', :mem => 1024, :cpus => 1, :box => 'ubuntu/trusty64' },
6+
{ :name => 'mesos-node-1', :ip => '10.141.141.11', :mem => 4096, :cpus => 1, :box => 'ubuntu/trusty64' },
7+
{ :name => 'mesos-node-2', :ip => '10.141.141.12', :mem => 1536, :cpus => 1, :box => 'centos65-x86_64-20140116',
8+
:box_url => 'https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box'
9+
}
810
]
911

1012
Vagrant.configure('2') do |config|
11-
config.vm.box = 'ubuntu/trusty64'
1213
config.ssh.insert_key = false
1314

1415
nodes.each do |node|
1516
config.vm.define node[:name] do |instance|
17+
instance.vm.box = node[:box]
18+
instance.vm.box_url = node[:box_url] unless node[:box_url].nil?
19+
1620
instance.vm.provider "virtualbox" do |vb|
1721
vb.customize ['modifyvm', :id, '--memory', node[:mem]]
1822
vb.customize ['modifyvm', :id, '--cpus', node[:cpus]]

0 commit comments

Comments
 (0)