Skip to content

201911 #25

merged 104 commits into from Jan 5, 2020
Merged
Changes from 5 commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
52dd6e1
Update Jenkinsfile
chubing Apr 19, 2019
67961e2
Update common.bash
chubing Apr 19, 2019
f323fbf
Update Jenkinsfile
chubing Apr 19, 2019
9497c39
Update manualBuild.sh
chubing Apr 19, 2019
7729514
Update Dockerfile
chubing Apr 19, 2019
39aef68
Update Jenkinsfile
chubing Apr 19, 2019
97305d6
Update Jenkinsfile
chubing Apr 19, 2019
a442729
Update manualBuild.sh
chubing Apr 19, 2019
97fc4a9
fixed context for oddball builds. paths will stay the same.
wgthom Apr 20, 2019
2dc9ad8
added gte tag to base
wgthom Apr 20, 2019
22f216b
fixed tagging scheme for image builds
wgthom Apr 20, 2019
d53ec91
fixed typo
wgthom Apr 20, 2019
dc720ba
added version tag
wgthom Apr 20, 2019
acd82d5
added version tag
wgthom Apr 20, 2019
4fbf26a
Update Dockerfile
wgthom Apr 20, 2019
2d75fc1
Create buildVersion.sh
wgthom Apr 20, 2019
41162de
updated 101 build to use VERSION_TAG
wgthom Apr 20, 2019
26b8dde
updated to use VERSION_TAG
wgthom Apr 20, 2019
6076c4d
updated to use VERSION_TAG
wgthom Apr 20, 2019
14cdb62
updated to use VERSION_TAG
wgthom Apr 20, 2019
d06a8ed
added VERSION_TAG to jenkins build
wgthom Apr 20, 2019
05e30ea
Update manualBuild.sh
wgthom Apr 20, 2019
1c99a6c
Update Jenkinsfile
wgthom Apr 20, 2019
dd934df
add VERSION_TAG to rest of build
wgthom Apr 20, 2019
40d0ec6
Update Jenkinsfile
wgthom Apr 20, 2019
9326941
Update buildVersion.sh
wgthom Apr 20, 2019
f0a55ed
Update Jenkinsfile
wgthom Apr 23, 2019
d463a7d
updated USERTOKEN
wgthom Apr 23, 2019
d8d92ac
Update README
dima767 Apr 23, 2019
bcb35c2
Update to tier shib-idp 3.4 immage wip
dima767 Apr 23, 2019
3820f6d
polishing
dima767 Apr 24, 2019
7e1c4f2
Merge pull request #13 from docker/201906-shib-upgrade
wgthom Apr 26, 2019
4957de7
Reworked readme
wgthom Apr 26, 2019
387d0e0
markdown updates
wgthom Apr 26, 2019
3e3c897
minor updates
wgthom Apr 26, 2019
91d1ffa
polish
wgthom Apr 26, 2019
83a5bd3
minor update
wgthom Apr 26, 2019
bd00217
minor update
wgthom Apr 27, 2019
f41a015
ignore spell check
wgthom Apr 27, 2019
38bcfc9
spelling
wgthom Apr 27, 2019
4bd952c
minor update
wgthom Apr 27, 2019
b188372
disable docker HEALTHCHECK
wgthom Apr 27, 2019
9a9ba2d
Merge branch '201906' of https://github.internet2.edu/docker/grouper_…
wgthom Apr 27, 2019
d9c6ad7
ignore .vscode
wgthom Apr 27, 2019
eb28c50
updated pspng config to match new app template
wgthom May 23, 2019
e355a46
initial docs import
wgthom May 29, 2019
2622d85
ignore build
wgthom May 29, 2019
5ec39bf
Merge branch '201906' of https://github.internet2.edu/docker/grouper_…
wgthom May 29, 2019
3cbe7e5
content added to index.rst
wgthom May 29, 2019
7b7bb06
moved ref and basis groups up to 201.1.1
wgthom May 30, 2019
2893834
rabbitmq start script
wgthom May 30, 2019
cb58886
content updates for 201
wgthom May 30, 2019
f1e39d8
gte command
wgthom May 30, 2019
d74239e
Merge pull request #16 from docker/201906-201-updates
wgthom May 30, 2019
03f891f
fixed docker image tag
wgthom May 30, 2019
0a5206b
added ref and basis tags to class groups
wgthom May 30, 2019
698c393
typo fix
wgthom May 30, 2019
82a7cb3
updated content for 2.1.2
wgthom May 31, 2019
6b9c6d9
updated gte for 201.2
wgthom May 31, 2019
58e9a1f
Merge branch '201906-201-updates' of https://github.internet2.edu/doc…
wgthom May 31, 2019
14448df
added gte version folders
wgthom May 31, 2019
ef92a1f
content update for 201.3
wgthom May 31, 2019
9ef07c2
added gte version folder
wgthom May 31, 2019
7bb5970
gte update for 201.3
wgthom May 31, 2019
0535d6c
Merge pull request #17 from docker/201906-201-updates
wgthom May 31, 2019
15eadaa
update headings
wgthom Jun 1, 2019
b2a62bf
content and gte updates for 201.4
wgthom Jun 1, 2019
1b6e586
Merge pull request #18 from docker/201906-201-updates
wgthom Jun 1, 2019
a934c58
content and gte updates for 201.5
wgthom Jun 2, 2019
df4b2b5
Merge pull request #19 from docker/201906-201-updates
wgthom Jun 2, 2019
604dde4
401.1 updates WIP
wgthom Jun 3, 2019
686644c
401 updates
wgthom Jun 6, 2019
8c80828
updates for 401 gte
wgthom Jun 6, 2019
db80bcc
Merge pull request #20 from docker/201906-201-updates
wgthom Jun 6, 2019
5b7d16c
content and gte updates for 401.2
wgthom Jun 7, 2019
6241645
Merge pull request #21 from docker/201906-201-updates
wgthom Jun 7, 2019
95c7d3b
401.3 content and gte updates
wgthom Jun 8, 2019
cd4cb48
401.5.7 updates
wgthom Jun 8, 2019
6cefbad
updates for 401.3
wgthom Jun 8, 2019
2adc619
updates for 401.3
wgthom Jun 8, 2019
59f9271
Merge pull request #22 from docker/201906-201-updates
wgthom Jun 8, 2019
01335e7
gte and content updates for 401.4
wgthom Jun 8, 2019
42680ba
Merge pull request #23 from docker/201906-201-updates
wgthom Jun 8, 2019
6a86074
gte helper scripts
wgthom Jun 9, 2019
fdf8fec
shib idp branding
wgthom Jun 9, 2019
3df83f2
updates for 201.1 and 201.2
wgthom Jun 10, 2019
fa3e0d9
updates for 201.3
wgthom Jun 10, 2019
2538c22
updates for 201.4
wgthom Jun 10, 2019
88437a0
201.5 updates
wgthom Jun 10, 2019
cb1ff40
404.4 update
wgthom Jun 10, 2019
2b188dd
Merge pull request #24 from docker/201906-201-updates
wgthom Jun 10, 2019
caf0648
cleaned up readme a bit
wgthom Jun 10, 2019
a98f774
readme fix
wgthom Jun 10, 2019
dc80644
added gdg folders, groups, and subjects to 101.1.1
wgthom Jun 10, 2019
31e9d88
added gdg folders, ref/basis groups, subjects
wgthom Jun 10, 2019
7eb4a39
grouper version at 2.4.0-a47-u25-w5-p6-20190611
wgthom Jun 12, 2019
a5c7fdb
grouper 2.4a64 101/201 updates
wgthom Jun 13, 2019
9c33823
updates for 401
wgthom Jun 13, 2019
7d70be3
only build setup and end for each module
wgthom Jun 13, 2019
80b9a9f
update for 201911 build
wgthom Oct 5, 2019
aa25e9e
updates for 201911 build
wgthom Oct 5, 2019
7f58304
update to grouper:latest and fix mysql install
wgthom Oct 9, 2019
2741016
enable config in ui for any IP address
wgthom Oct 29, 2019
9314d1f
grouper build for temple
wgthom Nov 1, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
207 changes: 114 additions & 93 deletions docs/201/201.1.rst
@@ -1,6 +1,6 @@
====================================
GTE 201.1 Basis and Reference Groups
====================================
==================================
Basis and Reference Groups (201.1)
==================================

-------------------
Learning Objectives
@@ -21,154 +21,175 @@ Lab Components
Overview
--------

Often the best source of data for building institutional meaningful cohorts is a
combination of arcane employee/payroll/student codes from multiple source systems.
To leverage the power of Grouper these groups should be brought in as raw **basis groups**.
Often the best source of data for building institutional meaningful cohorts is
a combination of arcane codes from multiple source systems, such as a payroll
or student information system. To leverage the power of Grouper, these groups
should be brought in as raw **basis groups**.

Basis groups are used by the IAM analyst to construct institutional meaningful
cohorts that are required for access policy. Access policy does not reference
cohorts that are required for access policy. Access policy does not reference
basis groups directly, rather the basis groups are used to build up reference
groups. This indirection provides the IAM analyst the ability to adjust to
groups. This indirection provides the IAM analyst the ability to adjust to
changing source systems and business practices while keeping reference groups
and access policy relatively stable. Basis groups are typically only visible to
the IAM analyst, and would not normally be reflected out to applications and
directories.

Reference groups tend to be organized in particular folder locations for convenience
and ease of use, but what makes a group a reference group is not its name or folder
location, but rather its intended use, definition and scope, and data management
expectations.

A **reference group** is a set of subjects that is largely intended to be used by
reference within access policy. Reference groups can be thought of as labels or
tags that identify institutional meaningful cohorts. In this way, they can also
be viewed as subject attributes from an ABAC perspective. Access policies often
require cohorts organized via institutional affiliation (faculty, staff, student),
a particular office or department (president's office, finance division, chaplain),
program (chemistry students), and even residence or class year. All of these are
good examples of reference groups.

This module will focus on creating and using basis and reference groups related to
students.

----------------
Exercise 201.1.1
----------------
the IAM analyst, and would not normally be reflected out to applications or
enterprise directories.

Reference groups tend to be organized in particular folder locations for
convenience and ease of use, but what makes a group a reference group is not
its name or folder location, but rather its intended use, definition and scope,
and data management expectations.

A **reference group** is a set of subjects that is intended to be used by
reference within access policy. Reference groups are added as members to policy
groups. Reference groups can be thought of as tags that identify institutional
meaningful cohorts. In this way, they can also be viewed as subject attributes
from an ABAC perspective. Access policies often require cohorts organized via
institutional affiliation (faculty, staff, student), a particular office or
department (president's office, finance division, chaplain), program (chemistry
students), and even residence or class year. All of these are good examples of
reference groups.

This module will focus on creating and using basis and reference groups related
to students.

---------------------------------------------
Exercise 201.1.1 All students reference group
---------------------------------------------

*Create an all student reference group to be used in access policy and the all
students mailing list*

Reference groups for student by class year already exist. These are being
used for class year mailing lists. Membership in these are updated
automatically by loader jobs:
Reference groups for student by class year already exist. These are being used
for class year mailing lists. Membership in the class year groups are updated
automatically by the studentTermLoader job. The loader job queries the student
information system.

1. Create a new group named `ref:student:students`.
(+ Create new group)

.. figure:: ../figures/201-create-students-group.png

2. Add the "ref" type to this group.
(More actions -> Types -> Type actions -> Edit type settings)

.. figure:: ../figures/201-add-ref-students.png

3. Add the following class year reference groups to `..:students`.
(Members -> + Add members -> ...)

* `ref:student:class2019`
* `ref:student:class2020`
* `ref:student:class2021`
* `ref:student:class2022`
* `ref:student:class2023`

#. Create a new reference group representing all students, `ref:student:students`.
#. Add the class year reference groups as direct members to `students`. How
many students are there? Filter by *indirect membership*.
#. You remember that recently graduated students have a grace period of 6 months
during which they retain full student access. Add `ref:student:class2018` to
`ref:student:students`, and set the membership end date to Dec. 31, 2018. How
many students are there now?
4. Filter for: Has direct membership. This shows all the reference groups that
contribute to the '..:students' group.

.. figure:: ../figures/201-students-direct-membership.png

5. Filter for: Has indirect membership. This shows every each subject who is a
member of the '..:students' group. How many students are there?

.. figure:: ../figures/201-students-indirect-membership.png

6. You suddenly remember that recently graduated students have a grace period
of 6 months during which they retain full student access. Add
`ref:student:class2019` to `ref:student:students`, and then set the
membership end date to Dec. 31, 2019. (class2019 -> Choose action -> Actions
-> Edit membership and privileges). How many students are there now?

.. figure:: ../figures/201-students-end-date.png

.. note::
.. note::

In this case, recently graduated students are still considered to be students
for the purpose of access control. If recent graduates only retained a few
services, it might make more sense to add these former students to individual
allow policies for the services in question.

----------------
Exercise 201.1.2
----------------
-------------------------------
Exercise 201.1.2 Other students
-------------------------------

*Other Students*
You remember that not all students have class years assigned. This includes
part-time students, employees taking courses, and non-matriculated students.
Fortunately, data about these students is available in the SIS and a basis
group has already been created for us.

You remember that not all students have class years assigned. This includes part-time
students, employees taking courses, and non-matriculated students. Fortunately data
about these students is available in the SIS and a basis group has already been created
for us.

#. Add `basis:student:student_no_class_year` to `ref:student:students`. How many
students are there, now?

----------------
Exercise 201.1.3
----------------
#. Add `basis:student:student_no_class_year` to `ref:student:students`. How
many students are there now?

*Exchange Students*
----------------------------------
Exercise 201.1.3 Exchange Students
----------------------------------

You campus participates in an exchange program with a sister school. Students
from the sister school can take classes at your institution, but never have
official records in your SIS. They do however, have a local NetID. Registration
is done directly with the registrar and the student's home institution maintains
the student records.
official records in your SIS. They do however, have a local NetID.
Registration is done directly with the registrar, and the student's home
institution maintains the student records.

#. Add `basis:student:exchange_students` to `ref:student:students`. How many
students are there now?

----------------
Exercise 201.1.4
----------------
----------------------------------
Exercise 201.1.4 Transfer Students
----------------------------------

*Transfer Students*

Students who transfer into your campus often need access to systems well ahead
Students who transfer to your campus often need access to systems well ahead
of SIS data being fully updated.

#. Create a new basis group, `basis:student:transfer_student`.
#. Add `transfer_student` to `students` with an expiration 60 days out.
#. Add the following accounts to `transfer_student`:

* agrady901
* alee467
* ascott776

#. Check how many students there are, now. The number of students did not go up
by 3 as you might have expected. Why? One of the transfer students was
already a member of `students`. Trace the membership on each of the transfer
students to determine which accounts already had the `students` subject
attribute, and why.

----------------
Exercise 201.1.5
----------------
#. Check how many students there are now. The number of students did not go
up by 3 as you might have expected. Why? One of the transfer students was
already a member of `students`. Trace the membership on each of the
transfer students to determine which accounts already had the `students`
subject attribute, and why.

*Change of Status*
---------------------------------
Exercise 201.1.5 Change of Status
---------------------------------

Students who leave for a variety of reasons are given a 32 day grace period
during which they retain student access. Basis groups for these already exist.
They include:

* `basis:student:expelled_32_days`
* `basis:student:resigned_32_days`
* `basis_student_transferred_32_days`
* `basis:student:student_transferred_32_days`

#. Add these basis groups to `students`. How many students are there, now?
#. Add these basis groups to `students`. How many students are there now?

----------------
Exercise 201.1.6
----------------
------------------------------------------
Exercise 201.1.6 Leave of Absence Students
------------------------------------------

*Leave of Absence Students*

Student may also obtain a leave of absence for a variety of reasons. These
Student may also obtain a leave of absence for a variety of reasons. These
students may or may not return, but retain student access for an extend period
of time. Basis groups for leave of absence students already exists:
of time. Basis groups for leave of absence students already exists:

* `basis:student:loa_4_years` (leave of absence within the last 4 years)

#. Add `loa_4_years` to `students`. How many students are there, now?




#. Add `loa_4_years` to `students`. How many students are there now?

-----------------------------------------------
Exercise 201.1.7 What do you mean by "student"?
-----------------------------------------------

The `student` reference group is used in access policy for student services.
Being a "student" means access to a broad array of student services. This
instutionally meaning cohort is well defined, easily understood, and capable
of being extended in a rational way. Review the `students` reference group
definition by using the Grouper Visualization feature. (students -> More
actions -> Visualization)

.. figure:: ../figures/201-students-visualization.png

.. _Grouper Deployment Guide: https://spaces.at.internet2.edu/display/Grouper/Grouper+Deployment+Guide+Work+-TIER+Program
4 changes: 2 additions & 2 deletions docs/201/index.rst
@@ -1,7 +1,7 @@
Grouper Access Governance (201)
===============================

This course explores access governance approach described in the `Grouper
This course explores the access governance strategy described in the `Grouper
Deployment Guide`_. After completing this course, the student will understand
how to use Grouper primitives to achieve access governance capabilities, and be
able to translate natural language policy into digital policy.
@@ -15,4 +15,4 @@ able to translate natural language policy into digital policy.
201.4
201.5

.. _Grouper Deployment Guide: https://spaces.at.internet2.edu/display/Grouper/Grouper+Deployment+Guide+Work+-TIER+Program
.. _Grouper Deployment Guide: https://spaces.at.internet2.edu/display/Grouper/Grouper+Deployment+Guide+Work+-TIER+Program
Binary file added docs/figures/201-add-ref-students.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/figures/201-create-students-group.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/figures/201-students-direct-membership.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/figures/201-students-end-date.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/figures/201-students-visualization.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
79 changes: 79 additions & 0 deletions ex201/ex201.1.1/container_files/seed-data/bootstrap.gsh
@@ -6,6 +6,7 @@ addRootStem("app", "app");
addRootStem("org", "org");
addRootStem("test", "test");

// loader job for class year groups :ref:student:class2019, etc.
addGroup("etc","studentTermLoader", "studentTermLoader");
groupAddType("etc:studentTermLoader", "grouperLoader");
setGroupAttr("etc:studentTermLoader", "grouperLoaderDbName", "grouper");
@@ -14,3 +15,81 @@ setGroupAttr("etc:studentTermLoader", "grouperLoaderScheduleType", "CRON");
setGroupAttr("etc:studentTermLoader", "grouperLoaderQuartzCron", "0 * * * * ?");
setGroupAttr("etc:studentTermLoader", "grouperLoaderQuartzCron", "0 * * * * ?");
setGroupAttr("etc:studentTermLoader", "grouperLoaderQuery", "select distinct id as SUBJECT_IDENTIFIER, 'ldap' as SUBJECT_SOURCE_ID, CONCAT('ref:student:class', term) as GROUP_NAME from SIS_STUDENT_TERMS");

// Stub out class groups. These will be filled out by the studentTermLoader
addStem("ref", "student", "student");
addGroup("ref:student", "class2019", "class2019");
addGroup("ref:student", "class2020", "class2020");
addGroup("ref:student", "class2021", "class2021");
addGroup("ref:student", "class2022", "class2022");
addGroup("ref:student", "class2023", "class2023");

// ex 201.1.2
addStem("basis", "student", "student");
addGroup("basis:student", "student_no_class_year", "student_no_class_year");
addMember("basis:student:student_no_class_year","wnielson101");
addMember("basis:student:student_no_class_year","ahenderson105");
addMember("basis:student:student_no_class_year","mnielson106");
addMember("basis:student:student_no_class_year","mclark114");
addMember("basis:student:student_no_class_year","gpeterson116");
addMember("basis:student:student_no_class_year","jvales117");
addMember("basis:student:student_no_class_year","lroberts121");
addMember("basis:student:student_no_class_year","jbutler123");
addMember("basis:student:student_no_class_year","nwilliams126");
addMember("basis:student:student_no_class_year","emartinez127");
addMember("basis:student:student_no_class_year","edavis128");
addMember("basis:student:student_no_class_year","jnielson130");
addMember("basis:student:student_no_class_year","abrown132");
addMember("basis:student:student_no_class_year","sanderson134");
addMember("basis:student:student_no_class_year","blee135");
addMember("basis:student:student_no_class_year","jgrady138");
addMember("basis:student:student_no_class_year","clopez141");
addMember("basis:student:student_no_class_year","jnielson152");
addMember("basis:student:student_no_class_year","jmartinez155");
addMember("basis:student:student_no_class_year","jlangenberg157");
addMember("basis:student:student_no_class_year","danderson161");
addMember("basis:student:student_no_class_year","ivales162");
addMember("basis:student:student_no_class_year","nmartinez163");
addMember("basis:student:student_no_class_year","mdavis164");
addMember("basis:student:student_no_class_year","dlopez166");

// ex 201.1.3
addGroup("basis:student", "exchange_students", "exchange_students");
addMember("basis:student:exchange_students","jnielson201");
addMember("basis:student:exchange_students","aprice205");
addMember("basis:student:exchange_students","cmorrison212");
addMember("basis:student:exchange_students","nroberts214");
addMember("basis:student:exchange_students","ehenderson217");
addMember("basis:student:exchange_students","lthompson225");
addMember("basis:student:exchange_students","mvales228");
addMember("basis:student:exchange_students","ddavis232");
addMember("basis:student:exchange_students","agasper233");
addMember("basis:student:exchange_students","jpeterson243");

// ex 201.1.5
addGroup("basis:student", "expelled_32_days", "expelled_32_days");
addMember("basis:student:expelled_32_days","ewilliams400");
addMember("basis:student:expelled_32_days","dwalters404");
addMember("basis:student:expelled_32_days","ldoe407");
addMember("basis:student:expelled_32_days","mhenderson421");
addMember("basis:student:expelled_32_days","mgonazles423");

addGroup("basis:student", "resigned_32_days", "resigned_32_days");
addMember("basis:student:resigned_32_days","enielson500");
addMember("basis:student:resigned_32_days","sgrady501");
addMember("basis:student:resigned_32_days","sgasper513");
addMember("basis:student:resigned_32_days","swilliams516");
addMember("basis:student:resigned_32_days","jmorrison517");

addGroup("basis:student", "transfered_32_days", "transfered_32_days");
addMember("basis:student:transfered_32_days","ppeterson609");
addMember("basis:student:transfered_32_days","nthompson612");
addMember("basis:student:transfered_32_days","sanderson613");
addMember("basis:student:transfered_32_days","mwhite617");
addMember("basis:student:transfered_32_days","mwalters618");

// ex 201.1.6
addGroup("basis:student", "loa_4_years", "loa_4_years");
addMember("basis:student:loa_4_years","jprice704");
addMember("basis:student:loa_4_years","aprice705");
addMember("basis:student:loa_4_years","aclark706");
116 changes: 11 additions & 105 deletions ex201/ex201.1.end/container_files/seed-data/bootstrap.gsh
@@ -1,14 +1,15 @@
gs = GrouperSession.startRootSession();

// ex201.1.1
addStem("ref", "student", "student")
// addStem("ref", "student", "student")
addGroup("ref:student", "students", "students");

addGroup("ref:student", "class2019", "class2019");
addGroup("ref:student", "class2020", "class2020");
addGroup("ref:student", "class2021", "class2021");
addGroup("ref:student", "class2022", "class2022");
addGroup("ref:student", "class2023", "class2023");
// added by loader job. these are not needed.
// addGroup("ref:student", "class2019", "class2019");
// addGroup("ref:student", "class2020", "class2020");
// addGroup("ref:student", "class2021", "class2021");
// addGroup("ref:student", "class2022", "class2022");
// addGroup("ref:student", "class2023", "class2023");

addMember("ref:student:students","ref:student:class2019");
addMember("ref:student:students","ref:student:class2020");
@@ -26,82 +27,17 @@ group = GroupFinder.findByName(gs, "ref:student:students", true);
subject = GroupFinder.findByName(gs, "ref:student:class2018", true).toSubject();
group.addOrEditMember(subject, true, true, null, cal.getTime(), false);


// ex 201.1.2
addStem("basis", "student", "student");
addGroup("basis:student", "student_no_class_year", "student_no_class_year");
addMember("basis:student:student_no_class_year","wnielson101");
addMember("basis:student:student_no_class_year","ahenderson105");
addMember("basis:student:student_no_class_year","mnielson106");
addMember("basis:student:student_no_class_year","mclark114");
addMember("basis:student:student_no_class_year","gpeterson116");
addMember("basis:student:student_no_class_year","jvales117");
addMember("basis:student:student_no_class_year","lroberts121");
addMember("basis:student:student_no_class_year","jbutler123");
addMember("basis:student:student_no_class_year","nwilliams126");
addMember("basis:student:student_no_class_year","emartinez127");
addMember("basis:student:student_no_class_year","edavis128");
addMember("basis:student:student_no_class_year","jnielson130");
addMember("basis:student:student_no_class_year","abrown132");
addMember("basis:student:student_no_class_year","sanderson134");
addMember("basis:student:student_no_class_year","blee135");
addMember("basis:student:student_no_class_year","jgrady138");
addMember("basis:student:student_no_class_year","clopez141");
addMember("basis:student:student_no_class_year","jnielson152");
addMember("basis:student:student_no_class_year","jmartinez155");
addMember("basis:student:student_no_class_year","jlangenberg157");
addMember("basis:student:student_no_class_year","danderson161");
addMember("basis:student:student_no_class_year","ivales162");
addMember("basis:student:student_no_class_year","nmartinez163");
addMember("basis:student:student_no_class_year","mdavis164");
addMember("basis:student:student_no_class_year","dlopez166");


addMember("ref:student:students","basis:student:student_no_class_year");

// ex 201.1.3
addGroup("basis:student", "exchange_students", "exchange_students");
addMember("basis:student:exchange_students","jnielson201");
addMember("basis:student:exchange_students","aprice205");
addMember("basis:student:exchange_students","cmorrison212");
addMember("basis:student:exchange_students","nroberts214");
addMember("basis:student:exchange_students","ehenderson217");
addMember("basis:student:exchange_students","lthompson225");
addMember("basis:student:exchange_students","mvales228");
addMember("basis:student:exchange_students","ddavis232");
addMember("basis:student:exchange_students","agasper233");
addMember("basis:student:exchange_students","jpeterson243");

addMember("ref:student:students","basis:student:exchange_students");

// ex 201.1.4
addGroup("basis:student", "transfer_student", "transfer_student");
addMember("basis:student:transfer_student","emartinez300");
addMember("basis:student:transfer_student","glee303");
addMember("basis:student:transfer_student","bdoe304");
addMember("basis:student:transfer_student","dlangenberg305");
addMember("basis:student:transfer_student","dthompson306");
addMember("basis:student:transfer_student","mdavis307");
addMember("basis:student:transfer_student","lmartinez312");
addMember("basis:student:transfer_student","awhite318");
addMember("basis:student:transfer_student","mclark321");
addMember("basis:student:transfer_student","jsmith322");
addMember("basis:student:transfer_student","ascott332");
addMember("basis:student:transfer_student","aroberts334");
addMember("basis:student:transfer_student","dgasper335");
addMember("basis:student:transfer_student","jsmith339");
addMember("basis:student:transfer_student","csmith340");
addMember("basis:student:transfer_student","klee342");
addMember("basis:student:transfer_student","elopez344");
addMember("basis:student:transfer_student","gdavis354");
addMember("basis:student:transfer_student","hpeterson355");
addMember("basis:student:transfer_student","glopez356");
addMember("basis:student:transfer_student","jclark361");
addMember("basis:student:transfer_student","svales364");
addMember("basis:student:transfer_student","aclark373");
addMember("basis:student:transfer_student","pmartinez374");
addMember("basis:student:transfer_student","mgrady376");

addMember("basis:student:transfer_student","agrady901");
addMember("basis:student:transfer_student","alee467");
addMember("basis:student:transfer_student","ascott776");

java.util.Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.DATE, 60);
@@ -110,55 +46,25 @@ subject = GroupFinder.findByName(gs, "basis:student:transfer_student", true).toS
group.addOrEditMember(subject, true, true, null, cal2.getTime(), false);

// ex 201.1.5
addGroup("basis:student", "expelled_32_days", "expelled_32_days");
addMember("basis:student:expelled_32_days","ewilliams400");
addMember("basis:student:expelled_32_days","dwalters404");
addMember("basis:student:expelled_32_days","ldoe407");
addMember("basis:student:expelled_32_days","mhenderson421");
addMember("basis:student:expelled_32_days","mgonazles423");


java.util.Calendar cal3 = Calendar.getInstance();
cal3.add(Calendar.DATE, 32);
group = GroupFinder.findByName(gs, "ref:student:students", true);
subject = GroupFinder.findByName(gs, "basis:student:expelled_32_days", true).toSubject();
group.addOrEditMember(subject, true, true, null, cal3.getTime(), false);

addGroup("basis:student", "resigned_32_days", "resigned_32_days");
addMember("basis:student:resigned_32_days","enielson500");
addMember("basis:student:resigned_32_days","sgrady501");
addMember("basis:student:resigned_32_days","sgasper513");
addMember("basis:student:resigned_32_days","swilliams516");
addMember("basis:student:resigned_32_days","jmorrison517");


java.util.Calendar cal4 = Calendar.getInstance();
cal4.add(Calendar.DATE, 32);
group = GroupFinder.findByName(gs, "ref:student:students", true);
subject = GroupFinder.findByName(gs, "basis:student:resigned_32_days", true).toSubject();
group.addOrEditMember(subject, true, true, null, cal4.getTime(), false);

addGroup("basis:student", "transfered_32_days", "transfered_32_days");
addMember("basis:student:transfered_32_days","ppeterson609");
addMember("basis:student:transfered_32_days","nthompson612");
addMember("basis:student:transfered_32_days","sanderson613");
addMember("basis:student:transfered_32_days","mwhite617");
addMember("basis:student:transfered_32_days","mwalters618");


java.util.Calendar cal5 = Calendar.getInstance();
cal5.add(Calendar.DATE, 32);
group = GroupFinder.findByName(gs, "ref:student:students", true);
subject = GroupFinder.findByName(gs, "basis:student:transfered_32_days", true).toSubject();
group.addOrEditMember(subject, true, true, null, cal5.getTime(), false);

// ex 201.1.6
addGroup("basis:student", "loa_4_years", "loa_4_years");
addMember("basis:student:loa_4_years","jprice704");
addMember("basis:student:loa_4_years","aprice705");
addMember("basis:student:loa_4_years","aclark706");


java.util.Calendar cal6 = Calendar.getInstance();
cal6.add(Calendar.YEAR, 4);
group = GroupFinder.findByName(gs, "ref:student:students", true);
@@ -174,4 +80,4 @@ cal7.set(2019, 7, 1)

group = GroupFinder.findByName(gs, "ref:student:on_track_grad", true);
subject = GroupFinder.findByName(gs, "ref:student:class2019", true).toSubject();
group.addOrEditMember(subject, true, true, null, cal7.getTime(), false);
group.addOrEditMember(subject, true, true, null, cal7.getTime(), false);
13 changes: 13 additions & 0 deletions gte
@@ -0,0 +1,13 @@
#! /bin/bash

if [ -z "$1" ]
then
docker images tier/gte
exit 0
fi

docker stop "$1" 2> /dev/null
docker rm "$1" 2> /dev/null
docker run -d -p 80:80 -p 389:389 -p 8443:443 -p 3306:3306 \
--link rabbitmq:rabbitmq --name $1 tier/gte:"$1"-201906-201-updates

3 changes: 3 additions & 0 deletions start-rabbitmq.sh
@@ -0,0 +1,3 @@
#! /bin/bash
docker run -d -p 15672:15672 --env RABBITMQ_NODENAME=docker-rabbit --hostname rabbitmq --name=rabbitmq rabbitmq:management