Skip to content

Commit c6b0c3e

Browse files
committed
Merge pull request #17 from ypg-data/jonas/centos-6.5
Support for CentOS 6.5 on Mesos agents
2 parents 7c4463d + f62d222 commit c6b0c3e

File tree

17 files changed

+119
-40
lines changed

17 files changed

+119
-40
lines changed

NEWS.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
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

1011
Fixes:
1112

12-
- mesos-dns: remove `netinfo` from `IPSources` to fix Docker tasks becoming
13+
- mesos-dns: Remove `netinfo` from `IPSources` to fix Docker tasks becoming
1314
unreachable.
1415
- mesos-agent: Store logs in `/var/log/mesos` and state files in `/mnt/mesos`
1516
so they can be analyzed after rebooting a node.
17+
- docker-engine: Use APT repo key hosted on apt.dockerproject.org
1618

1719
## 0.1.0
1820

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: keyserver=ha.pool.sks-keyservers.net 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-trusty 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: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,25 @@
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-
32-
- name: Disable Mesos Master
25+
# The Mesos package installs both the master and agent. Make the Mesos services
26+
# match those of the roles.
27+
- name: Disable Mesos Master for non-master hosts
3328
service: name=mesos-master state=stopped enabled=no
3429
when: "'mesos-master' not in group_names"
3530

36-
- name: Disable Mesos Agent
31+
- name: Disable Mesos Agent for non-agent hosts
3732
service: name=mesos-slave state=stopped enabled=no
3833
when: "'mesos-agent' not in group_names"

vagrant/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ The main user interfaces are:
6565
- Marathon: http://10.141.141.10:8080/
6666
- Chronos: http://10.141.141.10:4400/
6767

68+
And the default username and password is `mesos` / `mesos`.
69+
6870
To deploy applications use the DCOS CLI and the Marathon task descriptors in the
6971
`marathon` folder:
7072

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]]

vagrant/hosts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
10.141.141.10 ansible_hostname=mesos-node-0 zoo_id=1 agent_attributes="zone:public;layer:frontend" agent_resources="ports(*):[6000-60000]"
2-
10.141.141.11 ansible_hostname=mesos-node-1 agent_attributes="zone:private;layer:backend;dataflow:jobs-default;db:cassandra" agent_resources="ports(*):[6000-60000]"
3-
10.141.141.12 ansible_hostname=mesos-node-2 agent_attributes="zone:private;layer:backend;dataflow:jobs-secondary" agent_resources="ports(*):[6000-60000]"
2+
10.141.141.11 ansible_hostname=mesos-node-1 agent_attributes="zone:private;layer:backend" agent_resources="ports(*):[6000-60000]"
3+
10.141.141.12 ansible_hostname=mesos-node-2 agent_attributes="zone:private;layer:backend" agent_resources="ports(*):[6000-60000]"
44

55
[all:vars]
66
ansible_ssh_user=vagrant

vagrant/site.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
gather_facts: False
3939
hosts: mesos-agent
4040
roles:
41-
- { role: java }
4241
- { role: docker-engine }
4342
- { role: mesos }
4443
- { role: mesos-agent }

0 commit comments

Comments
 (0)