%global with_explicit_python27 1
%global pybasever 2.7
# __python_ver Could be 3 if/when ported to Python 3.5/3.6/...
%global __python %{_bindir}/python%{?pybasever}
%global __python2 %{_bindir}/python%{?pybasever}

%global python2_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%global python2_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")

%{!?pythonpath: %global pythonpath %(%{__python} -c "import os, sys; print(os.pathsep.join(x for x in sys.path if x))")}

# Following not recognised by setup.py
# %global __inst_layout --install-layout=unix


%global include_tests 1
# The tests are performed by default
# rpm -ba --define 'dotests 0' salt-2016.11.2-1.spec ...
%{!?dotests:%define include_tests 1}
%{?dotests:%define include_tests 0}


%define fish_dir %{_datadir}/fish/vendor_functions.d

%define _salttesting SaltTesting
%define _salttesting_ver 2016.10.26

Name: salt
Version: 2016.11.6
Release: 1
Summary: A parallel remote execution system

Group:   System Environment/Daemons
License: ASL 2.0
URL:     http://saltstack.org/
Source0: https://pypi.io/packages/source/s/%{name}/%{name}-%{version}.tar.gz
Source1: https://pypi.io/packages/source/S/%{_salttesting}/%{_salttesting}-%{_salttesting_ver}.tar.gz
Source2: %{name}-master
Source3: %{name}-syndic
Source4: %{name}-minion
Source5: %{name}-api
# Source6: %{name}-master.service
# Source7: %{name}-syndic.service
# Source8: %{name}-minion.service
# Source9: %{name}-api.service
Source10: salt_README.aix
Source11: %{name}-common.logrotate
Source12: salt.bash
Source13: salt.fish
Source14: salt_common.fish
Source15: salt-call.fish
Source16: salt-cp.fish
Source17: salt-key.fish
Source18: salt-master.fish
Source19: salt-minion.fish
Source20: salt-run.fish
Source21: salt-syndic.fish
# Source22: %{name}-proxy@.service

## Patch0:  salt-%%{version}-tests.patch
## Patch0:  salt-%{version}-fix-nameserver.patch


BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch

# man files are in /opt/freeware/share
%global _mandir /opt/freeware/share/man
# service start/stop scripts are in /etc
%global _initrddir /etc/rc.d/init.d

# Requires: pciutils
# Requires: which
Requires: yum-utils

BuildRequires: python-devel >= 2.7.13
BuildRequires: python-tornado >= 4.2.1
BuildRequires: python-futures >= 2.0
BuildRequires: python-pycrypto >= 2.6.1
BuildRequires: python-jinja2
BuildRequires: python-msgpack > 0.3
BuildRequires: python-pip
BuildRequires: python-pyzmq >= 16.0.2
BuildRequires: zeromq
BuildRequires: python-PyYAML
BuildRequires: python-requests
BuildRequires: python-unittest2
BuildRequires: python-mock
BuildRequires: git
BuildRequires: python-libcloud
BuildRequires: python-six
BuildRequires: python-argparse
BuildRequires: python%{?__python_ver}-devel

Requires: python >= 2.7.13
Requires: python-pycrypto >= 2.6.1
Requires: python-jinja2
Requires: python-msgpack > 0.3
Requires: python-PyYAML
Requires: python-requests >= 1.0.0
Requires: zeromq
Requires: python-markupsafe
Requires: python-tornado >= 4.2.1
Requires: python-futures >= 2.0
Requires: python-six
Requires: python-unittest2
Requires: python-pyzmq >= 16.0.2 
Requires: python-cherrypy


%description
Salt is a distributed remote execution system used to execute commands and
query data. It was developed in order to bring the best solutions found in
the world of remote execution together and make them better, faster and more
malleable. Salt accomplishes this via its ability to handle larger loads of
information, and not just dozens, but hundreds or even thousands of individual
servers, handle them quickly and through a simple and manageable interface.

%package master
Summary: Management component for salt, a parallel remote execution system
Group:   System Environment/Daemons
Requires: %{name} = %{version}-%{release}

%description master
The Salt master is the central server to which all minions connect.

%package minion
Summary: Client component for Salt, a parallel remote execution system
Group:   System Environment/Daemons
Requires: %{name} = %{version}-%{release}
Requires: python-backports_abc 
Requires: python-singledispatch

%description minion
The Salt minion is the agent component of Salt. It listens for instructions
from the master, runs jobs, and returns results back to the master.

%package syndic
Summary: Master-of-master component for Salt, a parallel remote execution system
Group:   System Environment/Daemons
Requires: %{name}-master = %{version}-%{release}

%description syndic
The Salt syndic is a master daemon which can receive instruction from a
higher-level master, allowing for tiered organization of your Salt
infrastructure.

%package api
Summary: REST API for Salt, a parallel remote execution system
Group:   Applications/System
Requires: %{name}-master = %{version}-%{release}
Requires: python%{?__python_ver}-cherrypy


%description api
salt-api provides a REST interface to the Salt master.

%package cloud
Summary: Cloud provisioner for Salt, a parallel remote execution system
Group:   Applications/System
Requires: %{name}-master = %{version}-%{release}
Requires: python%{?__python_ver}-libcloud

%description cloud
The salt-cloud tool provisions new cloud VMs, installs salt-minion on them, and
adds them to the master's collection of controllable minions.

%package ssh
Summary: Agentless SSH-based version of Salt, a parallel remote execution system
Group:   Applications/System
Requires: %{name} = %{version}-%{release}

%description ssh
The salt-ssh tool can run remote execution functions and states without the use
of an agent (salt-minion) service.

%prep
%setup -q -c
%setup -q -T -D -a 1

cd %{name}-%{version}
## %patch0 -p1

%build


%install
rm -rf %{buildroot}
cd $RPM_BUILD_DIR/%{name}-%{version}/%{name}-%{version}
# %{__python} setup.py install -O1 %{?__inst_layout } --root %{buildroot}
%{__python} setup.py install -O1  --root %{buildroot}

# Add some directories
install -d -m 0755 %{buildroot}%{_var}/log/salt
touch %{buildroot}%{_var}/log/salt/minion
touch %{buildroot}%{_var}/log/salt/master
install -d -m 0755 %{buildroot}%{_var}/cache/salt
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/master.d
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/minion.d
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/pki
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/pki/master
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/pki/minion
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/cloud.conf.d
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/cloud.deploy.d
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/cloud.maps.d
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/cloud.profiles.d
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/cloud.providers.d
install -d -m 0755 %{buildroot}%{_sysconfdir}/salt/proxy.d

# Add the config files
install -p -m 0640 conf/minion %{buildroot}%{_sysconfdir}/salt/minion
install -p -m 0640 conf/master %{buildroot}%{_sysconfdir}/salt/master
install -p -m 0640 conf/cloud %{buildroot}%{_sysconfdir}/salt/cloud
install -p -m 0640 conf/roster %{buildroot}%{_sysconfdir}/salt/roster
install -p -m 0640 conf/proxy %{buildroot}%{_sysconfdir}/salt/proxy

# %if ! (0%{?rhel} >= 7 || 0%{?fedora} >= 15)
mkdir -p %{buildroot}%{_initrddir}
install -p %{SOURCE2} %{buildroot}%{_initrddir}/
install -p %{SOURCE3} %{buildroot}%{_initrddir}/
install -p %{SOURCE4} %{buildroot}%{_initrddir}/
install -p %{SOURCE5} %{buildroot}%{_initrddir}/
# %else
# Add the unit files
# mkdir -p %{buildroot}%{_unitdir}
# install -p -m 0644 %{SOURCE6} %{buildroot}%{_unitdir}/
# install -p -m 0644 %{SOURCE7} %{buildroot}%{_unitdir}/
# install -p -m 0644 %{SOURCE8} %{buildroot}%{_unitdir}/
# install -p -m 0644 %{SOURCE9} %{buildroot}%{_unitdir}/
# %endif


# Logrotate
install -p %{SOURCE10} .
mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d/
install -p -m 0644 %{SOURCE11} %{buildroot}%{_sysconfdir}/logrotate.d/salt

# Bash completion
mkdir -p %{buildroot}%{_sysconfdir}/bash_completion.d/
install -p -m 0644 %{SOURCE12} %{buildroot}%{_sysconfdir}/bash_completion.d/salt.bash

# Fish completion (TBD remove -v)
mkdir -p %{buildroot}%{fish_dir}
install -p -m 0644  %{SOURCE13} %{buildroot}%{fish_dir}/salt.fish
install -p -m 0644  %{SOURCE14} %{buildroot}%{fish_dir}/salt_common.fish
install -p -m 0644  %{SOURCE15} %{buildroot}%{fish_dir}/salt-call.fish
install -p -m 0644  %{SOURCE16} %{buildroot}%{fish_dir}/salt-cp.fish
install -p -m 0644  %{SOURCE17} %{buildroot}%{fish_dir}/salt-key.fish
install -p -m 0644  %{SOURCE18} %{buildroot}%{fish_dir}/salt-master.fish
install -p -m 0644  %{SOURCE19} %{buildroot}%{fish_dir}/salt-minion.fish
install -p -m 0644  %{SOURCE20} %{buildroot}%{fish_dir}/salt-run.fish
install -p -m 0644  %{SOURCE21} %{buildroot}%{fish_dir}/salt-syndic.fish


%preun master
# Stop salt-master process
  # if [ $1 -eq 0 ] ; then
  #     /sbin/service salt-master stop >/dev/null 2>&1
  #     /sbin/chkconfig --del salt-master
  # fi
  # if [ $1 -eq 0 ] ; then
  #     %{_initrddir}/salt-master stop >/dev/null 2>&1
  # fi

%preun syndic
# Stop salt-syndic process
  # if [ $1 -eq 0 ] ; then
  #     /sbin/service salt-syndic stop >/dev/null 2>&1
  #     /sbin/chkconfig --del salt-syndic
  # fi
  # if [ $1 -eq 0 ] ; then
  #     %{_initrddir}/salt-syndic stop >/dev/null 2>&1
  # fi

%preun minion
# Stop salt-minion process
  # if [ $1 -eq 0 ] ; then
  #     /sbin/service salt-minion stop >/dev/null 2>&1
  #     /sbin/chkconfig --del salt-minion
  # fi
  # if [ $1 -eq 0 ] ; then
  #     %{_initrddir}/salt-minion stop >/dev/null 2>&1
  # fi

%post master
#test ! -e /etc/salt && ln -sf %{_sysconfdir}/salt /etc/salt
ln -sf %{_sysconfdir}/salt /etc/salt
# Launch salt-master process
  # /sbin/chkconfig --add salt-master
  # %{_initrddir}/salt-master start >/dev/null 2>&1

%post minion
ln -sf %{_sysconfdir}/salt /etc/salt
#test ! -e /etc/salt && ln -sf %{_sysconfdir}/salt /etc/salt
# Launch salt-minion process
  # /sbin/chkconfig --add salt-minion
  # %{_initrddir}/salt-minion start >/dev/null 2>&1

%postun master
  # if [ "$1" -ge "1" ] ; then
  #     /sbin/service salt-master condrestart >/dev/null 2>&1 || :
  # fi
  # if [ "$1" -ge "1" ] ; then
  #     %{_initrddir}/salt-master condrestart >/dev/null 2>&1 || :
  # fi

#%%postun syndic
#  if [ "$1" -ge "1" ] ; then
#      /sbin/service salt-syndic condrestart >/dev/null 2>&1 || :
#  fi
#  if [ "$1" -ge "1" ] ; then
#      %{_initrddir}/salt-syndic condrestart >/dev/null 2>&1 || :
#  fi

%postun minion
  # if [ "$1" -ge "1" ] ; then
  #     /sbin/service salt-minion condrestart >/dev/null 2>&1 || :
  # fi
  # if [ "$1" -ge "1" ] ; then
  #     %{_initrddir}/salt-minion condrestart >/dev/null 2>&1 || :
  # fi


# %if ( 0%{?include_tests} )
# %if %{include_tests}
# %check
# cd $RPM_BUILD_DIR/%{name}-%{version}/%{name}-%{version}
# mkdir %{_tmppath}/salt-test-cache
# PYTHONPATH=%{pythonpath}:$RPM_BUILD_DIR/%{name}-%{version}/%{_salttesting}-%{_salttesting_ver} %{__python} setup.py test --runtests-opts=-u
# %endif
#%check
#cd $RPM_BUILD_DIR/%{name}-%{version}/%{name}-%{version}
#mkdir %{_tmppath}/salt-test-cache
#PYTHONPATH=%{pythonpath}:$RPM_BUILD_DIR/%{name}-%{version}/%{_salttesting}-%{_salttesting_ver} %{__python} setup.py test --runtests-opts=-u

%clean
rm -rf %{buildroot}

%files
%defattr(-,root,system,-)
%doc $RPM_BUILD_DIR/%{name}-%{version}/%{name}-%{version}/LICENSE
%{python2_sitelib}/%{name}/*
%{python2_sitelib}/%{name}-%{version}-py?.?.egg-info

%{_sysconfdir}/logrotate.d/salt
%{_sysconfdir}/bash_completion.d/salt.bash
%{_var}/cache/salt
%{_var}/log/salt
%doc $RPM_BUILD_DIR/%{name}-%{version}/%{name}-%{version}/salt_README.aix
%{_bindir}/spm
%doc %{_mandir}/man1/spm.1*
# %config(noreplace) %{_sysconfdir}/salt/
# %config(noreplace) %{_sysconfdir}/salt/pki
# %config(noreplace) %{fish_dir}/salt*.fish

%files master
%defattr(-,root,system)
%doc %{_mandir}/man7/salt.7*
%doc %{_mandir}/man1/salt.1*
%doc %{_mandir}/man1/salt-cp.1*
%doc %{_mandir}/man1/salt-key.1*
%doc %{_mandir}/man1/salt-master.1*
%doc %{_mandir}/man1/salt-run.1*
%doc %{_mandir}/man1/salt-unity.1*
%{_bindir}/salt
%{_bindir}/salt-cp
%{_bindir}/salt-key
%{_bindir}/salt-master
%{_bindir}/salt-run
%{_bindir}/salt-unity
%attr(0755, root, system) /%{_initrddir}/salt-master

%config(noreplace) %{_sysconfdir}/salt/master
%config(noreplace) %{_sysconfdir}/salt/master.d
%config(noreplace) %{_sysconfdir}/salt/pki/master
%config(noreplace) %{_var}/log/salt/master

%files minion
%defattr(-,root,system)
%doc %{_mandir}/man1/salt-call.1*
%doc %{_mandir}/man1/salt-minion.1*
%doc %{_mandir}/man1/salt-proxy.1*
%{_bindir}/salt-minion
%{_bindir}/salt-call
%{_bindir}/salt-proxy
%attr(0755, root, system) /%{_initrddir}/salt-minion

%config(noreplace) %{_sysconfdir}/salt/minion
%config(noreplace) %{_sysconfdir}/salt/proxy
%config(noreplace) %{_sysconfdir}/salt/minion.d
%config(noreplace) %{_sysconfdir}/salt/pki/minion
%config(noreplace) %{_var}/log/salt/minion

%files syndic
%defattr(-,root,system)
%doc %{_mandir}/man1/salt-syndic.1*
%{_bindir}/salt-syndic
%attr(0755, root, system) /%{_initrddir}/salt-syndic

%files api
%defattr(-,root,system)
%doc %{_mandir}/man1/salt-api.1*
%{_bindir}/salt-api
%attr(0755, root, system) /%{_initrddir}/salt-api

%files cloud
%defattr(-,root,system)
%doc %{_mandir}/man1/salt-cloud.1*
%{_bindir}/salt-cloud
%{_sysconfdir}/salt/cloud.conf.d
%{_sysconfdir}/salt/cloud.deploy.d
%{_sysconfdir}/salt/cloud.maps.d
%{_sysconfdir}/salt/cloud.profiles.d
%{_sysconfdir}/salt/cloud.providers.d
%config(noreplace) %{_sysconfdir}/salt/cloud

%files ssh
%defattr(-,root,system)
%doc %{_mandir}/man1/salt-ssh.1*
%{_bindir}/salt-ssh
%config(noreplace) %{_sysconfdir}/salt/roster




%changelog
* Mon Nov 06 2017 Ravi Hirekurabar<rhirekur@in.ibm.com>
- Initial port.

