From 711daf098e021380f4a927a9d95a46305ce83f76 Mon Sep 17 00:00:00 2001 From: TeoV Date: Mon, 10 Feb 2020 18:01:09 +0200 Subject: [PATCH] Rename packages to deb_packages and create yum_packages ansible script --- .../distributions.conf.j2 | 0 .../{packages => deb_packages}/gen-key-script | 0 .../{packages => deb_packages}/go.yaml | 0 .../{packages => deb_packages}/golang.sh.j2 | 0 .../gpg-gen-key.yaml | 0 .../{packages => deb_packages}/gpg.conf.j2 | 0 .../{packages => deb_packages}/gpg.yaml | 0 .../{packages => deb_packages}/main.yaml | 0 .../{packages => deb_packages}/nginx.conf.j2 | 0 .../{packages => deb_packages}/nginx.yaml | 0 .../options.conf.j2 | 0 .../{packages => deb_packages}/reprepro.yaml | 0 data/ansible/yum_packages/cgrates.spec.j2 | 123 ++++++++++++++ data/ansible/yum_packages/go.yaml | 122 ++++++++++++++ data/ansible/yum_packages/golang.sh.j2 | 12 ++ data/ansible/yum_packages/main.yaml | 156 ++++++++++++++++++ data/ansible/yum_packages/nginx.conf.j2 | 22 +++ data/ansible/yum_packages/nginx.yaml | 19 +++ 18 files changed, 454 insertions(+) rename data/ansible/{packages => deb_packages}/distributions.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/gen-key-script (100%) rename data/ansible/{packages => deb_packages}/go.yaml (100%) rename data/ansible/{packages => deb_packages}/golang.sh.j2 (100%) rename data/ansible/{packages => deb_packages}/gpg-gen-key.yaml (100%) rename data/ansible/{packages => deb_packages}/gpg.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/gpg.yaml (100%) rename data/ansible/{packages => deb_packages}/main.yaml (100%) rename data/ansible/{packages => deb_packages}/nginx.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/nginx.yaml (100%) rename data/ansible/{packages => deb_packages}/options.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/reprepro.yaml (100%) create mode 100644 data/ansible/yum_packages/cgrates.spec.j2 create mode 100644 data/ansible/yum_packages/go.yaml create mode 100644 data/ansible/yum_packages/golang.sh.j2 create mode 100644 data/ansible/yum_packages/main.yaml create mode 100644 data/ansible/yum_packages/nginx.conf.j2 create mode 100644 data/ansible/yum_packages/nginx.yaml diff --git a/data/ansible/packages/distributions.conf.j2 b/data/ansible/deb_packages/distributions.conf.j2 similarity index 100% rename from data/ansible/packages/distributions.conf.j2 rename to data/ansible/deb_packages/distributions.conf.j2 diff --git a/data/ansible/packages/gen-key-script b/data/ansible/deb_packages/gen-key-script similarity index 100% rename from data/ansible/packages/gen-key-script rename to data/ansible/deb_packages/gen-key-script diff --git a/data/ansible/packages/go.yaml b/data/ansible/deb_packages/go.yaml similarity index 100% rename from data/ansible/packages/go.yaml rename to data/ansible/deb_packages/go.yaml diff --git a/data/ansible/packages/golang.sh.j2 b/data/ansible/deb_packages/golang.sh.j2 similarity index 100% rename from data/ansible/packages/golang.sh.j2 rename to data/ansible/deb_packages/golang.sh.j2 diff --git a/data/ansible/packages/gpg-gen-key.yaml b/data/ansible/deb_packages/gpg-gen-key.yaml similarity index 100% rename from data/ansible/packages/gpg-gen-key.yaml rename to data/ansible/deb_packages/gpg-gen-key.yaml diff --git a/data/ansible/packages/gpg.conf.j2 b/data/ansible/deb_packages/gpg.conf.j2 similarity index 100% rename from data/ansible/packages/gpg.conf.j2 rename to data/ansible/deb_packages/gpg.conf.j2 diff --git a/data/ansible/packages/gpg.yaml b/data/ansible/deb_packages/gpg.yaml similarity index 100% rename from data/ansible/packages/gpg.yaml rename to data/ansible/deb_packages/gpg.yaml diff --git a/data/ansible/packages/main.yaml b/data/ansible/deb_packages/main.yaml similarity index 100% rename from data/ansible/packages/main.yaml rename to data/ansible/deb_packages/main.yaml diff --git a/data/ansible/packages/nginx.conf.j2 b/data/ansible/deb_packages/nginx.conf.j2 similarity index 100% rename from data/ansible/packages/nginx.conf.j2 rename to data/ansible/deb_packages/nginx.conf.j2 diff --git a/data/ansible/packages/nginx.yaml b/data/ansible/deb_packages/nginx.yaml similarity index 100% rename from data/ansible/packages/nginx.yaml rename to data/ansible/deb_packages/nginx.yaml diff --git a/data/ansible/packages/options.conf.j2 b/data/ansible/deb_packages/options.conf.j2 similarity index 100% rename from data/ansible/packages/options.conf.j2 rename to data/ansible/deb_packages/options.conf.j2 diff --git a/data/ansible/packages/reprepro.yaml b/data/ansible/deb_packages/reprepro.yaml similarity index 100% rename from data/ansible/packages/reprepro.yaml rename to data/ansible/deb_packages/reprepro.yaml diff --git a/data/ansible/yum_packages/cgrates.spec.j2 b/data/ansible/yum_packages/cgrates.spec.j2 new file mode 100644 index 000000000..401d92a21 --- /dev/null +++ b/data/ansible/yum_packages/cgrates.spec.j2 @@ -0,0 +1,123 @@ +{{ ansible_managed | comment }} +%global version 0.10 +%global git_commit {{ git_version.stdout_lines[0] }} + +%global git_short_commit %(c=%{git_commit}; echo ${c:0:7}) +%define debug_package %{nil} +%global _logdir /var/log/%name +%global _spooldir /var/spool/%name +%global _libdir /var/lib/%name + +Name: cgrates +Version: %{version} +Release: v0.10.0 +Summary: Carrier Grade Real-time Charging System +License: GPLv3 +URL: https://github.com/cgrates/cgrates +Source0: https://github.com/cgrates/cgrates/archive/%{git_commit}.tar.gz + +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +Requires(pre): shadow-utils +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +%else +Requires(post): chkconfig +Requires(preun):chkconfig +Requires(preun):initscripts +%endif + +%description +CGRateS is a very fast and easy scalable real-time charging system for Telecom environments. + +%prep +%setup -q -n %{name}-%{version} -c +mkdir -p src/github.com/cgrates +ln -sf ../../../%{name}-%{git_commit} src/github.com/cgrates/cgrates + +%pre +getent group %{name} >/dev/null || groupadd -r %{name} +getent passwd %{name} >/dev/null || \ +useradd -r -g %{name} -d %{_localstatedir}/run/%{name} -s /sbin/nologin \ +-c "CGRateS" %{name} 2>/dev/null || : + +%post +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +if [ $1 -eq 1 ] ; then + # Initial installation + /bin/systemctl daemon-reload >/dev/null 2>&1 || : +fi +%else +/sbin/chkconfig --add %{name} +%endif +/bin/chown -R %{name}:%{name} %{_logdir} +/bin/chown -R %{name}:%{name} %{_spooldir} +/bin/chown -R %{name}:%{name} %{_libdir} + +%preun +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload disable %{name}.service > /dev/null 2>&1 || : + /bin/systemctl stop %{name}.service > /dev/null 2>&1 || : +fi +%else +if [ $1 = 0 ]; then + /sbin/service %{name} stop > /dev/null 2>&1 + /sbin/chkconfig --del %{name} +fi +%endif + +%build +cd $RPM_BUILD_DIR/%{name}-%{version}/src/github.com/cgrates/cgrates +./build.sh + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/conf/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/diameter/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/postman/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/radius/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/tariffplans/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/tutorial_tests/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/tutorials/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +install -D -m 0644 -p {{ cgrates_dir }}/data/conf/%{name}/%{name}.json $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/%{name}.json +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-console $RPM_BUILD_ROOT%{_bindir}/cgr-console +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-engine $RPM_BUILD_ROOT%{_bindir}/cgr-engine +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-loader $RPM_BUILD_ROOT%{_bindir}/cgr-loader +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-tester $RPM_BUILD_ROOT%{_bindir}/cgr-tester +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-migrator $RPM_BUILD_ROOT%{_bindir}/cgr-migrator +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdre/csv +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdre/fwv +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/cdre/csv +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/cdre/fwv +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/tpe +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/failed_posts +mkdir -p $RPM_BUILD_ROOT%{_libdir}/history +mkdir -p $RPM_BUILD_ROOT%{_libdir}/cache_dump +install -D -m 0644 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.options $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name} +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 + install -D -m 0644 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.service $RPM_BUILD_ROOT%{_unitdir}/%{name}.service +%else + install -D -m 0755 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.init $RPM_BUILD_ROOT%{_initrddir}/%{name} +%endif + +%files +%defattr(-,root,root,-) +%{_datarootdir}/%{name}/* +%{_bindir}/* +%config(noreplace) %{_sysconfdir}/%{name}/%{name}.json +%{_logdir}/* +%{_spooldir}/* +%{_libdir}/* +%{_sysconfdir}/sysconfig/%{name} +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 + %{_unitdir}/%{name}.service +%else + %{_initrddir}/%{name} +%endif + +%clean +rm -rf $RPM_BUILD_DIR/%{name}-%{version} +rm -rf $RPM_BUILD_ROOT diff --git a/data/ansible/yum_packages/go.yaml b/data/ansible/yum_packages/go.yaml new file mode 100644 index 000000000..c08fae40b --- /dev/null +++ b/data/ansible/yum_packages/go.yaml @@ -0,0 +1,122 @@ +--- +- name: create gopath directory + file: + state: directory + mode: 'u=rwx,go=rx' + dest: '{{ golang_gopath }}' + +- name: create download directory + file: + state: directory + mode: 'u=rwx,go=rx' + dest: '{{ golang_download_dir }}' + +- name: Register the current Go version (if any) + command: /usr/local/go/bin/go version + ignore_errors: yes + register: go_version + changed_when: false + +- name: Remove old installation of Go + become: yes + file: + path: /usr/local/go + state: absent + when: go_version is failed or go_version.stdout != go_version_target + +- name: download Go language SDK + get_url: + url: '{{ golang_mirror }}/{{ golang_redis_filename }}' + dest: '{{ golang_download_dir }}/{{ golang_redis_filename }}' + mode: 'u=rw,go=r' + +- name: create Go language SDK installation directory + become: yes + file: + state: directory + owner: root + group: root + mode: 'u=rwx,go=rx' + dest: '{{ golang_install_dir }}' + +- name: install Go language SDK + become: yes + unarchive: + src: '{{ golang_download_dir }}/{{ golang_redis_filename }}' + remote_src: yes + extra_opts: '--strip-components=1' + dest: '{{ golang_install_dir }}' + owner: root + group: root + creates: '{{ golang_install_dir }}/bin' + +# Set Go language SDK environment variables +- name: make sure /etc/profile.d exists + become: yes + file: + path: /etc/profile.d + state: directory + owner: root + group: root + mode: 'u=rwx,go=rx' + +- name: export Go language SDK environment variables + become: yes + template: + src: golang.sh.j2 + dest: /etc/profile.d/golang.sh + owner: root + group: root + mode: 'u=rw,go=r' + +- name: Export GOROOT for root + become: yes + lineinfile: + path: ~/.bashrc + line: export GOROOT='{{ golang_install_dir }}' + insertafter: last + +- name: Add GOROOT to PATH for root + become: yes + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOROOT/bin + insertafter: last + +- name: Export GOPATH for root + become: yes + lineinfile: + dest: ~/.bashrc + line: export GOPATH='{{ golang_gopath }}' + insertafter: last + +- name: Add GOPATH to PATH for root + become: yes + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOPATH/bin + insertafter: last + +- name: Export GOROOT + lineinfile: + dest: ~/.bashrc + line: export GOROOT='{{ golang_install_dir }}' + insertafter: last + +- name: Add GOROOT to PATH + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOROOT/bin + insertafter: last + +- name: Export GOPATH + lineinfile: + dest: ~/.bashrc + line: export GOPATH='{{ golang_gopath }}' + insertafter: last + +- name: Add GOPATH to PATH + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOPATH/bin + insertafter: last diff --git a/data/ansible/yum_packages/golang.sh.j2 b/data/ansible/yum_packages/golang.sh.j2 new file mode 100644 index 000000000..7bfc41c2e --- /dev/null +++ b/data/ansible/yum_packages/golang.sh.j2 @@ -0,0 +1,12 @@ + +#!/bin/sh + +{{ ansible_managed | comment('plain') }} + +export GOROOT='{{ golang_install_dir }}' +export PATH=$PATH:$GOROOT/bin + +{% if golang_gopath not in (None, '') %} +export GOPATH="{{ golang_gopath }}" +export PATH=$PATH:$GOPATH/bin +{% endif %} \ No newline at end of file diff --git a/data/ansible/yum_packages/main.yaml b/data/ansible/yum_packages/main.yaml new file mode 100644 index 000000000..56d407f21 --- /dev/null +++ b/data/ansible/yum_packages/main.yaml @@ -0,0 +1,156 @@ +--- +- name: Check and set python version on YUM server + hosts: yum + remote_user: '{{ gouser }}' + gather_facts: false + tasks: + - name: symlink /usr/bin/python -> /usr/bin/python3 + raw: | + if [ -f /usr/bin/python3 ] && [ ! -f /usr/bin/python ]; then + ln --symbolic /usr/bin/python3 /usr/bin/python; + fi + become: true + +- hosts: yum + vars: + ############################################################### + ##################### Golang Vars ############################# + ############################################################### + # Go language SDK version number + golang_version: '1.13' + go_version_target: "go version go{{ golang_version }} linux/amd64" + # Mirror to download the Go language SDK redistributable package from + golang_mirror: 'https://storage.googleapis.com/golang' + # Base installation directory the Go language SDK distribution + golang_install_dir: '/usr/local/go' + # Directory to store files downloaded for Go language SDK installation + golang_download_dir: "{{ x_ansible_download_dir | default(ansible_env.HOME + '/.ansible/tmp/downloads') }}" + # Location for GOPATH environment variable + golang_gopath: "/home/{{ gouser }}/go" + # Filename of Go language SDK redistributable package + golang_redis_filename: 'go{{ golang_version }}.linux-amd64.tar.gz' + + ############################################################### + # CGRateS location + cgrates_dir: "{{ golang_gopath }}/src/github.com/cgrates/cgrates" + + rootUser : root + + customPath: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + dependencies: + - build-essential + - git + - devscripts + - nginx + - rpm + - createrepo + + remote_user: '{{ gouser }}' + tasks: +########################################################################################################################### +########################################################################################################################### +# install dependencies + - name: Install dependencies + become: yes + apt: name={{ dependencies }} state=present +########################################################################################################################### +########################################################################################################################### +# Prepare for configuration + - name: Check if NGINX needs to be configured + become: true + shell: "ls /etc/nginx/sites-enabled | grep 'yum.cgrates.org.vhost'" + ignore_errors: true + register: nginxConfig + + - name: Configure NGINX server + include: nginx.yaml + when: nginxConfig.stdout_lines|length < 1 + +########################################################################################################################### +########################################################################################################################### +# Install Golang + - name: install unarchive dependencies (zypper) + become: yes + zypper: + name: + - gzip + - tar + state: present + when: ansible_pkg_mgr == 'zypper' + + - name: Install golang + include: go.yaml + +########################################################################################################################### +########################################################################################################################### +# Install CGRateS + - name: create cgrates directory + become: yes + file: + state: directory + mode: 'u=rwx,go=rx' + owner: "{{ gouser }}" + group: "{{ gouser }}" + dest: '{{ cgrates_dir }}' + become_user: "{{ gouser }}" + + - name: git clone cgrates + git: + repo: https://github.com/cgrates/cgrates.git + dest: '{{ cgrates_dir }}' + update: yes + force: yes + become: yes + become_user: "{{ gouser }}" + + - name: build cgrates + shell: "sh {{ cgrates_dir }}/build.sh" + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + args: + chdir: '{{ cgrates_dir }}' + + - name: get git version + shell: git rev-parse HEAD + register: git_version + args: + chdir: '{{ cgrates_dir }}' + + - name: symbol link + become: yes + file: + src: "{{ cgrates_dir }}/data" + dest: "/usr/share/cgrates" + state: link +########################################################################################################################### +########################################################################################################################### +# Generate package + - name: Create the folders for build + become: yes + file: + path: cgr_build/{{ item.dirName }} + state: directory + loop: + - { dirName: BUILD } + - { dirName: SOURCES } + - { dirName: SPECS } + - { dirName: SRPMS } + + - name: Download the tar.gz for the last commit + become: yes + shell: wget https://github.com/cgrates/cgrates/archive/{{ git_version.stdout_lines[0] }}.tar.gz + args: + chdir: cgr_build/SOURCES + + - name: Add cgrates.spec in SPECS + become: yes + template: + src: cgrates.spec.j2 + dest: cgr_build/SPECS/cgrates.spec + + - name: Generate the .rpm file + become: yes + shell: 'rpmbuild -bb --define "_topdir /home/{{ gouser }}/cgr_build" cgr_build/SPECS/cgrates.spec' + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" diff --git a/data/ansible/yum_packages/nginx.conf.j2 b/data/ansible/yum_packages/nginx.conf.j2 new file mode 100644 index 000000000..138450a5b --- /dev/null +++ b/data/ansible/yum_packages/nginx.conf.j2 @@ -0,0 +1,22 @@ +{{ ansible_managed | comment }} +server { + listen 80; + server_name yum.cgrates.org; + + access_log /var/log/nginx/packages-error.log; + error_log /var/log/nginx/packages-error.log; + + location / { + root /var/packages; + index index.html; + autoindex on; + } + + location ~ /(.*)/conf { + deny all; + } + + location ~ /(.*)/db { + deny all; + } +} \ No newline at end of file diff --git a/data/ansible/yum_packages/nginx.yaml b/data/ansible/yum_packages/nginx.yaml new file mode 100644 index 000000000..5bff49654 --- /dev/null +++ b/data/ansible/yum_packages/nginx.yaml @@ -0,0 +1,19 @@ +--- +- name: Add apt.cgrates.vhost in nginx + become: true + template: + src: nginx.conf.j2 + dest: "/etc/nginx/sites-available/yum.cgrates.org.vhost" + mode: '0600' + owner: "{{ rootUser }}" + +- name: Create a symlink for apt.cgrates.org + become: true + file: + src: "/etc/nginx/sites-available/yum.cgrates.org.vhost" + dest: "/etc/nginx/sites-enabled/yum.cgrates.org.vhost" + state: link + +- name: Restart the nginx so the change take effects + become: true + shell: "/etc/init.d/nginx reload" \ No newline at end of file