Skip to main content

GSuite_Sync

Sync MAC addresses from your GSuite into Cisco ISE

Build Status


INSTALL PROCESS

To set up gsync as a service on Linux, follow the below process

Prep the Linux OS with Python3

  1. Install required OS packages for Python
  • Raspberry Pi may need Python and PIP sudo apt install -y python-pip as well as sudo apt-get install libffi-dev
  • Debian (Ubuntu) distributions may need Python and PIP
    • Install Python and PIP: sudo apt install -y python-pip
  • RHEL (CentOS) distributions usually need PIP
    • Install the EPEL package: sudo yum install -y epel-release
    • Install PIP: sudo yum install -y python36-pip
    • Back up the old Python2 binary: mv /usr/bin/python /usr/bin/python-old
    • Make Python3 the default binary: sudo ln -fs /usr/bin/python36 /usr/bin/python

Install GSync from PyPi

  1. Install using PIP: pip install gsuite_sync

Install GSync from source

  1. Retrieve the source code repository using one of the two below methods
  • Method #1: Install a Git client (process differs depending on OS) and clone the GSuite_Sync repository using Git git clone https://github.com/PackeTsar/gsuite_sync.git
    • Change to the branch you want to install using git checkout <branch_name>
  • Method #2: Download and extract the repository files from the Github Repo
    • Make sure to download the branch you want to install
  1. Move into the gsuite_sync project directory cd gsuite_sync
  2. Run the setup.py file to build the package into the ./build/ directory python setup.py build
  3. Use PIP to install the package pip install .
  4. Once the install completes, you should be able to run the command gsync -h and see the help menu. GSync is now ready to use.

Help Output

usage: gsync [-h] [-v] [-gc CREDENTIAL_FILE] [-gm REGEX] [-ia IP/ADDRESS]
             [-iu USERNAME] [-ip PASSWORD] [-ig GROUP_NAME] [-c CONFIG_FILE]
             [-l LOG_FILE] [-d] [-fs] [-um MAC_ADDRESS] [-us SERIAL_NUMBER]
             [-m]

GSuite_Sync - Sync Chromebook MAC addresses from your GSuite into Cisco ISE

Misc Arguments:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit

Required Arguments:
  -gc CREDENTIAL_FILE, --gsuite_credential CREDENTIAL_FILE
                        GSuite Credential File
  -ia IP/ADDRESS, --ise_address IP/ADDRESS
                        ISE DNS or IP Address
  -iu USERNAME, --ise_username USERNAME
                        ISE Login Username
  -ip PASSWORD, --ise_password PASSWORD
                        ISE Login Password
  -ig GROUP_NAME, --ise_group GROUP_NAME
                        ISE Target Endpoint Group

Optional Arguments:
  -gm REGEX, --gsuite_path_match REGEX
                        GSuite Object Path Match Pattern
  -c CONFIG_FILE, --config_file CONFIG_FILE
                        Config File Path
  -l LOG_FILE, --logfiles LOG_FILE
                        Log File Path
  -d, --debug           Set debug level (WARNING by default)
                                Debug level INFO:  '-d'
                                Debug level DEBUG: '-d'

Action Arguments:
  -fs, --full_sync      Perform full sync of GSuite MACs to ISE Group
  -um MAC_ADDRESS, --update_mac MAC_ADDRESS
                        Push an individual MAC to the ISE Group
  -us SERIAL_NUMBER, --update_serial SERIAL_NUMBER
                        Lookup a device's MAC and update it in the ISE Group
  -m, --maintain        maintain pushing devices

Example Config Files

Arguments can be passed in at the command line or with a config file. It is often easier to use a config file and that is what we will do for setting up the service. The /root/credentials.json file referenced is an API credential file for your GSuite account.

Example Config File (/root/config.json)

{
  "gsuite_credential": "/root/credentials.json",
  "gsuite_path_match": "SOMEREGEXPATHMATCH",
  "ise_address": "192.168.1.100",
  "ise_username": "admin",
  "ise_password": "admin123",
  "ise_group": "my_special_group",
  "logfiles": ["/etc/gsync/logs.log"]
}

Create the Service File

Use VI to create a new file (vi /etc/init.d/gsync) and insert the below BASH script for the file contents

#!/bin/bash
# gsync daemon
# chkconfig: 345 20 80
# description: gsync Daemon
# processname: gsync

DAEMON_PATH="/usr/local/bin/"

DAEMON=gsync
STDOUTFILE=/etc/gsync/stdout.log
STDERR=/etc/gsync/stderr.log

NAME=gsync
DESC="gsync Daemon"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

case "$1" in
start)
        printf "%-50s" "Starting $NAME..."
        cd $DAEMON_PATH
        PID=`stdbuf -o0 $DAEMON -c /root/config.json -m >> $STDOUTFILE 2>>$STDERR & echo $!`
        #echo "Saving PID" $PID " to " $PIDFILE
        if [ -z $PID ]; then
            printf "%s
" "Fail"
        else
            echo $PID > $PIDFILE
            printf "%s
" "Ok"
        fi
;;
status)
        if [ -f $PIDFILE ]; then
            PID=`cat $PIDFILE`
            if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
                printf "%s
" "Process dead but pidfile exists"
            else
                echo "$DAEMON (pid $PID) is running..."
            fi
        else
            printf "%s
" "$DAEMON is stopped"
        fi
;;
stop)
        printf "%-50s" "Stopping $NAME"
            PID=`cat $PIDFILE`
            cd $DAEMON_PATH
        if [ -f $PIDFILE ]; then
            kill -HUP $PID
            printf "%s
" "Ok"
            rm -f $PIDFILE
        else
            printf "%s
" "pidfile not found"
        fi
;;

restart)
        $0 stop
        $0 start
;;

*)
        echo "Usage: $0 {status|start|stop|restart}"
        exit 1
esac

Finish and Start Up Service

chmod 777 /etc/init.d/gsync
chkconfig gsync on
service gsync start
service gsync status

Metadata

Release files for gsuite-sync 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gsuite-sync 0.2.1
File Size Uploaded Provenance
gsuite_sync-0.2.1.tar.gz 27.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for gsuite-sync 0.2.1
File Interpreter ABI Platform
gsuite_sync-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 53.7 kB

Release files / gsuite_sync-0.2.1.tar.gz

Download URL gsuite_sync-0.2.1.tar.gz
Size 27.3 kB
Tags Source
SHA-256 checksum
How to use checksums
5454e13009e97efa63b902446effe0deb00a13eb2cd453c6136908c90c00d541
BLAKE2b-256 checksum
How to use checksums
0e674d6d8ad4fec40718ebf953ed39f518ebf9c6eb7b432333d0cec604d9807d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.1

Release files / gsuite_sync-0.2.1-py3-none-any.whl

Download URL gsuite_sync-0.2.1-py3-none-any.whl
Size 26.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1333153e299ba08277eece6641d6f258dafc48c9a986add7f690525825d46df1
BLAKE2b-256 checksum
How to use checksums
870a632b6b87969bf70fc19a73dd01ecb076e024767ad84dc8ba683888df4719
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.1

Security for gsuite-sync 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page