diff --git a/.drone.yml b/.drone.yml index 7d5e587d5..675627609 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,6 @@ kind: pipeline type: docker -name: unit tests +name: unit workspace: path: /cgrates @@ -12,7 +12,21 @@ steps: commands: - docker-entrypoint.sh - ./test.sh +- name: notify + pull: never + image: trial97/drone-email + settings: + from: cgrates.test01@gmail.com + credentials: + from_secret: credentials + token: + from_secret: token + recipients: + - alexandru.tripon@itsyscom.com + + +--- kind: pipeline type: docker name: default @@ -29,12 +43,18 @@ steps: - ./integration_test.sh - name: notify - image: drillster/drone-email + pull: never + image: trial97/drone-email settings: from: cgrates.test01@gmail.com - host: smtp.gmail.com - username: cgrates.test01 + credentials: + from_secret: credentials + token: + from_secret: token recipients: - alexandru.tripon@itsyscom.com when: - status: [ changed, failure ] \ No newline at end of file + status: [ changed, failure ] + +depends_on: +- unit diff --git a/config/config_defaults.go b/config/config_defaults.go index db7bc5678..1e2f62070 100644 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -309,7 +309,6 @@ const CGRATES_CFG_JSON = ` "*tp_routes": {"limit": -1, "ttl": "", "static_ttl": false, "replicate": false}, "*tp_attributes":{"limit": -1, "ttl": "", "static_ttl": false, "replicate": false}, "*tp_chargers":{"limit": -1, "ttl": "", "static_ttl": false, "replicate": false}, - "*versions": {"limit": -1, "ttl": "", "static_ttl": false, "replicate": false}, "*tp_dispatcher_profiles":{"limit": -1, "ttl": "", "static_ttl": false, "replicate": false}, "*tp_dispatcher_hosts":{"limit": -1, "ttl": "", "static_ttl": false, "replicate": false}, "*tp_rate_profiles":{"limit": -1, "ttl": "", "static_ttl": false, "replicate": false}, diff --git a/data/ansible/drone/.env.j2 b/data/ansible/drone/.env.j2 new file mode 100644 index 000000000..97e0b24fb --- /dev/null +++ b/data/ansible/drone/.env.j2 @@ -0,0 +1,11 @@ +DRONE_GITHUB_CLIENT_ID={{ drone_github_client_id }} +DRONE_GITHUB_CLIENT_SECRET={{ drone_github_client_secret }} +DRONE_SERVER_PROTO={{ drone_server_protocol }} +DRONE_SERVER_HOST={{ drone_server_host }} +DRONE_VALIDATE_PLUGIN_ENDPOINT=http://{{ drone_validate_plugin_endpoint }} +DRONE_VALIDATE_PLUGIN_SECRET={{ drone_secret.stdout }} +DRONE_RPC_SECRET={{ drone_secret.stdout }} +DRONE_USER_CREATE=username:{{ drone_user_create }},admin:true,token:{{ drone_token.stdout }} +DRONE_USER_FILTER={{ drone_user_filter }} +DRONE_TLS_AUTOCERT=true +DRONE_LOGS_DEBUG=true diff --git a/data/ansible/drone/docker.yaml b/data/ansible/drone/docker.yaml new file mode 100644 index 000000000..5d9ec62df --- /dev/null +++ b/data/ansible/drone/docker.yaml @@ -0,0 +1,43 @@ +--- + +- name: Add Docker's public GPG key to the APT keyring + become: true + apt_key: + url: https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg + state: present + +- name: Configure Docker's upstream APT repository + become: true + apt_repository: + repo: deb [arch=amd64] https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable + state: present + update_cache: yes + +- name: Install Docker + become: true + apt: + name: + - docker-ce + - docker-ce-cli + - containerd.io + state: "present" + +- name: Add user(s) to "docker" group + become: true + user: + name: "{{ user }}" + groups: "docker" + append: true + +- name: Enable service docker and ensure it is not masked + become: true + systemd: + name: docker + state: started + enabled: yes + masked: no + +- name: Install Docker Module for Python + shell: "pip3 install docker" + + \ No newline at end of file diff --git a/data/ansible/drone/go.yaml b/data/ansible/drone/go.yaml new file mode 100644 index 000000000..c08fae40b --- /dev/null +++ b/data/ansible/drone/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/drone/golang.sh.j2 b/data/ansible/drone/golang.sh.j2 new file mode 100644 index 000000000..7bfc41c2e --- /dev/null +++ b/data/ansible/drone/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/drone/main.yaml b/data/ansible/drone/main.yaml new file mode 100644 index 000000000..708e12608 --- /dev/null +++ b/data/ansible/drone/main.yaml @@ -0,0 +1,290 @@ +--- +- name: Check and set python version on APT server + hosts: local + remote_user: '{{ user }}' + 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: local + vars: + ############################################################### + ##################### Golang Vars ############################# + ############################################################### + # Go language SDK version number + golang_version: '1.15.7' + 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/{{ user }}/go" + # Filename of Go language SDK redistributable package + golang_redis_filename: 'go{{ golang_version }}.linux-amd64.tar.gz' + + ################################################################# + cgrates_dir: "{{ golang_gopath }}/src/github.com/cgrates/cgrates" + ################################################################# + drone_dir: "/home/{{ user }}/go/src/github.com/drone/drone" + + drone_server_protocol: https + drone_server_host: leotrial.duckdns.org + drone_validate_plugin_endpoint: 127.0.0.1:3001 + docker_runner_capacity: 20 + + drone_user_create: Trial97 + drone_user_filter: cgrates,danbogos,TeoV,Trial97,porosnicuadrian,andronache98 + ############################################################### + # CGRateS vars + dependencies: + - build-essential + - git + - apt-transport-https + - ca-certificates + - openssl + - gnupg-agent + - software-properties-common + - python3 + - python3-pip + - virtualenv + - python3-setuptools + rootUser : root + + remote_user: '{{ user }}' + tasks: +########################################################################################################################### +########################################################################################################################### +# install dependencies + - name: Install dependencies + become: yes + apt: name={{ dependencies }} state=present + + - name: Configure docker + include: docker.yaml +########################################################################################################################### +########################################################################################################################### +# 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 + +########################################################################################################################### +########################################################################################################################### + - name: clean go cache + become: yes + shell: "go clean --cache" + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + - name: clean go modcache + become: yes + shell: "go clean --modcache" + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + - name: create mailer directory + become: yes + file: + state: directory + mode: 'u=rwx,go=rx' + owner: "{{ user }}" + group: "{{ user }}" + dest: '{{ golang_gopath }}/src/github.com/Trial97/drone-email' + become_user: "{{ user }}" + + - name: git clone mailer + git: + repo: https://github.com/Trial97/drone-email.git + dest: '{{ golang_gopath }}/src/github.com/Trial97/drone-email' + update: yes + force: yes + version: "master" + become: yes + become_user: "{{ user }}" + + - name: build Docker image for mail plugin + become: yes + shell: docker build -t trial97/drone-email {{ golang_gopath }}/src/github.com/Trial97/drone-email + args: + chdir: '{{ golang_gopath }}/src/github.com/Trial97/drone-email' + + + - name: create drone-cli directory + become: yes + file: + state: directory + mode: 'u=rwx,go=rx' + owner: "{{ user }}" + group: "{{ user }}" + dest: '{{ golang_gopath }}/src/github.com/drone/drone-cli' + become_user: "{{ user }}" + + - name: git clone mailer + git: + repo: https://github.com/drone/drone-cli.git + dest: '{{ golang_gopath }}/src/github.com/drone/drone-cli' + update: yes + force: yes + version: "master" + become: yes + become_user: "{{ user }}" + + - name: build drone-cli + shell: go build -o {{ golang_gopath }}/bin/drone-cli ./main.go + args: + chdir: '{{ golang_gopath }}/src/github.com/drone/drone-cli/drone' + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + - name: create cgrates directory + become: yes + file: + state: directory + mode: 'u=rwx,go=rx' + owner: "{{ user }}" + group: "{{ user }}" + dest: '{{ cgrates_dir }}' + become_user: "{{ user }}" + + - name: git clone cgrates + git: + repo: https://github.com/Trial97/cgrates.git + dest: '{{ cgrates_dir }}' + update: yes + force: yes + version: "master" + become: yes + become_user: "{{ user }}" + + - name: copy storage scripts + shell: + mkdir -p postgres; + cp {{ cgrates_dir }}/data/storage/postgres/create_cdrs_tables.sql ./postgres/create_cdrs_tables.sql; + cp {{ cgrates_dir }}/data/storage/postgres/create_tariffplan_tables.sql ./postgres/create_tariffplan_tables.sql; + cp {{ cgrates_dir }}/data/storage/mysql/create_cdrs_tables.sql ./mysql/create_cdrs_tables.sql; + cp {{ cgrates_dir }}/data/storage/mysql/create_db_with_users.sql ./mysql/create_db_with_users.sql; + cp {{ cgrates_dir }}/data/storage/mysql/create_tariffplan_tables.sql ./mysql/create_tariffplan_tables.sql; + cp {{ cgrates_dir }}/data/storage/mongo/create_user.js ./create_user.js; + args: + warn: false + chdir: '{{ cgrates_dir }}/data/docker/integration/scripts' + + - name: build Docker image for integration + become: yes + shell: docker build -t cgrates-integration {{ cgrates_dir }}/data/docker/integration/ + args: + chdir: '{{ cgrates_dir }}/data/docker/integration' + + - name: create drone directory + become: yes + file: + state: directory + mode: 'u=rwx,go=rx' + owner: "{{ user }}" + group: "{{ user }}" + dest: '{{ drone_dir }}' + become_user: "{{ user }}" + + - name: git clone drone + git: + repo: https://github.com/drone/drone.git + dest: '{{ drone_dir }}' + update: yes + force: yes + become: yes + become_user: "{{ user }}" + + - name: build drone + shell: "go install github.com/drone/drone/cmd/drone-server" + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + args: + chdir: '{{ drone_dir }}' + + - name: install validate plugin + shell: "go get github.com/Trial97/droneAuth" + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + - name: export users + template: + src: users.json.j2 + dest: /home/{{ user }}/users.json + + - name: generate RPCSecret + shell: "openssl rand -hex 16" + register: drone_secret + + + - name: generate token + shell: "openssl rand -hex 16" + register: drone_token + + - name: export server config + template: + src: .env.j2 + dest: /home/{{ user }}/.env + + - name: start validate plugin + shell: "droneAuth -secret={{ drone_secret.stdout }} -cfg=/home/{{ user }}/users.json -endpoint={{ drone_validate_plugin_endpoint }}>/dev/null 2>&1 &" + async: 10 + poll: 0 + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + - name: start drone + become: yes + shell: "drone-server --env-file=/home/{{ user }}/.env >/home/{{ user }}/drone.log 2>&1 &" + async: 10 + poll: 0 + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + - name: Check if drone-runner is running + become: yes + shell: docker container ls -q -f="name=drone-runner" + register: continerList2 + + - name: Start drone-runner + become: yes + shell: docker run -d -v /var/run/docker.sock:/var/run/docker.sock -e DRONE_RPC_PROTO="{{ drone_server_protocol }}" -e DRONE_RPC_HOST="{{ drone_server_host }}" -e DRONE_RPC_SECRET="{{ drone_secret.stdout }}" -e DRONE_RUNNER_CAPACITY={{ docker_runner_capacity }} -e DRONE_RUNNER_NAME=cgrates -p 3000:3000 --restart always --name runner drone/drone-runner-docker:1 + when: continerList2.stdout_lines|length == 0 + + - name: Creating credentials file + copy: + dest: "/home/{{ user }}/credentials.json" + content: "{{ gapi_credentials }}" + + - name: Creating token file + copy: + dest: "/home/{{ user }}/token.json" + content: "{{ gapi_token }}" + + - name: add secrets + become: yes + shell: | + drone-cli orgsecret add Trial97 credentials @/home/{{ user }}/credentials.json --allow-pull-request; + drone-cli orgsecret add Trial97 token @/home/{{ user }}/token.json --allow-pull-request; + rm /home/{{ user }}/credentials.json; + rm /home/{{ user }}/token.json; + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + DRONE_SERVER: "{{ drone_server_protocol }}://{{ drone_server_host }}" + DRONE_TOKEN: "{{ drone_token.stdout }}" + diff --git a/data/ansible/drone/users.json.j2 b/data/ansible/drone/users.json.j2 new file mode 100644 index 000000000..8e03fae97 --- /dev/null +++ b/data/ansible/drone/users.json.j2 @@ -0,0 +1,8 @@ +{ + "cgrates": "autoBuild", + "danbogos": "autoBuild", + "TeoV": "autoBuild", + "Trial97": "autoBuild", + "porosnicuadrian": "autoBuild", + "andronache98": "autoBuild" +} \ No newline at end of file diff --git a/data/conf/samples/mongoatlas/cgrates.json b/data/conf/samples/mongoatlas/cgrates.json index 0dda2107a..4cfffb25c 100755 --- a/data/conf/samples/mongoatlas/cgrates.json +++ b/data/conf/samples/mongoatlas/cgrates.json @@ -141,4 +141,9 @@ }, +"chargers": { + "enabled": true, + "attributes_conns": ["*internal"], +}, + } diff --git a/data/docker/integration/Dockerfile b/data/docker/integration/Dockerfile index 3032ab6aa..5155b17f2 100644 --- a/data/docker/integration/Dockerfile +++ b/data/docker/integration/Dockerfile @@ -65,12 +65,6 @@ RUN chmod 777 /logs/mariadb.log /logs/mariadb_script.log /logs/rabbitmq.log COPY ./scripts /scripts -COPY ../../storage/mongo/create_user.js /scripts/create_user.js -COPY ../../storage/postgres/create_cdrs_tables.sql /scripts/postgres/create_cdrs_tables.sql -COPY ../../storage/postgres/create_tariffplan_tables.sql /scripts/postgres/create_tariffplan_tables.sql -COPY ../../storage/mysql/create_cdrs_tables.sql /scripts/mysql/create_cdrs_tables.sql -COPY ../../storage/mysql/create_db_with_users.sql /scripts/mysql/create_db_with_users.sql -COPY ../../storage/mysql/create_tariffplan_tables.sql /scripts/mysql/create_tariffplan_tables.sql COPY ./scripts/service /usr/local/bin/service COPY ./conf/rsyslogd.conf /etc/rsyslogd.conf