def main():
    # Instantiate config object and get settings from CLI args
    config = provisioner.ConfigManager()
    config.set_config_from_args()

    # Get a list of all CSP accounts managed by Halo
    halo = provisioner.Halo(config)
    halo.sanity_check()
    csp_accounts = halo.get_all_csp_accounts()

    # Get a list of account IDs and account display names from the CSV
    csv_consumer = provisioner.CsvConsumer(config)
    csv_tups = csv_consumer.get_account_metadata()

    # Get lists of accounts to be provisioned and updated
    blender = provisioner.Blender(csp_accounts, csv_tups)
    marching_orders = blender.create_change_set()

    # Perform provisioning in Halo
    print("Provisioning CSP accounts into Halo group %s with external ID %s." %
          (config.target_halo_group_id, config.external_id))
    for create_target in marching_orders["create"]:
        print("Provisioning account %s with display name %s" % create_target)
        if not config.dry_run:
            halo.provision_csp_account(create_target[0], create_target[1],
                                       config.role_name, config.external_id,
                                       config.target_halo_group_id)
    for update_target in marching_orders["update"]:
        print("Updating account %s with display name %s." % update_target)
        if not config.dry_run:
            halo.update_csp_display_name(update_target[0], update_target[1])
    return
 def test_account_display_name_needs_updating_false(self):
     row = ('357886268579', 'agseteam1')
     halo_data = self.get_halo_account_data()
     csv_data = self.get_csv_update_data()
     blender = provisioner.Blender(halo_data, csv_data)
     result = blender.account_display_name_needs_updating(row)
     assert result is None
 def test_account_is_monitored_true(self):
     row = ('357886268579', 'agseteam1')
     halo_data = self.get_halo_account_data()
     csv_data = self.get_csv_update_data()
     blender = provisioner.Blender(halo_data, csv_data)
     result = blender.account_is_monitored(row)
     assert result is True
 def test_account_is_monitored_false(self):
     row = ('abc123', 'unmonitored_account')
     halo_data = self.get_halo_account_data()
     csv_data = self.get_csv_update_data()
     blender = provisioner.Blender(halo_data, csv_data)
     result = blender.account_is_monitored(row)
     assert result is False
 def test_account_display_name_needs_updating_true(self):
     row = ('357886268579', 'agseteam12')
     halo_csp_account_id = "920b3f30-9204-469a-967c-878aa4a77c06"
     halo_data = self.get_halo_account_data()
     csv_data = self.get_csv_update_data()
     blender = provisioner.Blender(halo_data, csv_data)
     result = blender.account_display_name_needs_updating(row)
     assert result == halo_csp_account_id
 def test_get_change_set(self):
     """Test change set from blending CSV and existing Halo account info."""
     update_tup = ("920b3f30-9204-469a-967c-878aa4a77c07", "oneword")
     create_tup = ("123123000000", "AccountNameCamelCase")
     halo_data = self.get_halo_account_data()
     csv_data = self.get_csv_update_data()
     blender = provisioner.Blender(halo_data, csv_data)
     change_set = blender.create_change_set()
     assert "create" in change_set.keys()
     assert "update" in change_set.keys()
     assert update_tup in change_set["update"]
     assert create_tup in change_set["create"]
     assert isinstance(change_set["update"][0][0], basestring)
     assert isinstance(change_set["update"][0][1], basestring)
     assert isinstance(change_set["create"][0][0], basestring)
     assert isinstance(change_set["create"][0][1], basestring)
     assert len(change_set["create"]) == 4
     assert len(change_set["update"]) == 1