Fix idempotency around systemd restart
[integration/packaging/puppet-opendaylight.git] / manifests / install.pp
index f2796931afbc7cfdb40318825bd1722db219b821..56c4909e788f02aea0683a97617122b505e7ab02 100644 (file)
@@ -1,43 +1,65 @@
 # == Class opendaylight::install
 #
-# This class is called from opendaylight for install.
+# Manages the installation of OpenDaylight.
+#
+# There are two install methods: RPM-based and deb-based. The resulting
+# system state should be functionally equivalent.
 #
 class opendaylight::install {
-  $base_url = $::operatingsystem ? {
-    'CentOS' => 'https://copr-be.cloud.fedoraproject.org/results/dfarrell07/OpenDaylight/epel-7-$basearch/',
-    'Fedora' => 'https://copr-be.cloud.fedoraproject.org/results/dfarrell07/OpenDaylight/fedora-$releasever-$basearch/',
-  }
-
-  if $::tarball_url == '' {
-    yumrepo { 'opendaylight':
+  if $::osfamily == 'RedHat' {
+    # Add OpenDaylight's Yum repository
+    yumrepo { $opendaylight::rpm_repo:
       # 'ensure' isn't supported with Puppet <3.5
       # Seems to default to present, but docs don't say
       # https://docs.puppetlabs.com/references/3.4.0/type.html#yumrepo
       # https://docs.puppetlabs.com/references/3.5.0/type.html#yumrepo
-      baseurl  => $base_url,
-      descr    => 'OpenDaylight SDN controller',
-      gpgcheck => 0,
+      baseurl  => "http://cbs.centos.org/repos/nfv7-${opendaylight::rpm_repo}/\$basearch/os/",
+      descr    => 'OpenDaylight SDN Controller',
       enabled  => 1,
+      # NB: RPM signing is an active TODO, but is not done. We will enable
+      #     this gpgcheck once the RPM supports it.
+      gpgcheck => 0,
       before   => Package['opendaylight'],
     }
 
+    # Install the OpenDaylight RPM
     package { 'opendaylight':
       ensure  => present,
-      require => Yumrepo['opendaylight'],
+      require => Yumrepo[$opendaylight::rpm_repo],
+    }
+    ->
+    # Configure the systemd file with Java options
+    file_line { 'java_options_systemd':
+      ensure => present,
+      path   => '/usr/lib/systemd/system/opendaylight.service',
+      line   => "Environment=_JAVA_OPTIONS=\'${opendaylight::java_opts}\'",
+      match  => '^Environment.*',
+      after  => 'ExecStart=/opt/opendaylight/bin/start',
+    }
+    ~>
+    exec {'reload_systemd_units':
+      command     => 'systemctl daemon-reload',
+      path        => '/bin',
+      refreshonly => true,
     }
   }
-  else {
-    archive { 'opendaylight-0.2.2':
-      ensure           => present,
-      # TODO: Removed hard-coded URL, use param
-      url              => 'https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.2.2-Helium-SR2/distribution-karaf-0.2.2-Helium-SR2.tar.gz',
-      target           => '/opt/',
-      checksum         => false,
-      # This discards top-level dir of extracted tarball
-      # Required to get proper /opt/opendaylight-<version> path
-      # Ideally, camptocamp/puppet-archive would support this. PR later?
-      strip_components => 1,
+
+  elsif $::osfamily == 'Debian'{
+
+    include apt
+
+    # Add ODL ppa repository
+    apt::ppa{ $opendaylight::deb_repo: }
+
+    # Install Opendaylight .deb pkg
+    package { 'opendaylight':
+      ensure  => present,
+      require => Apt::Ppa[$opendaylight::deb_repo],
     }
-    # TODO: Download ODL systemd .service file and put in right location
+
+    Apt::Ppa[$opendaylight::deb_repo] -> Package['opendaylight']
+  }
+  else {
+    fail("Unknown operating system method: ${::osfamily}")
   }
 }