# Via Soda Core

> Go to the [data source reference for Soda Core](https://docs.soda.io/reference/data-source-reference-for-soda-core) for more in-depth details about supported data sources and connection parameters.

**A data source can be partially onboarded** programmatically via Soda Core. Once a data source is fully onboarded via Soda Cloud, the engineering team can onboard datasets programmatically.

In a nutshell, a dataset is pushed onto Soda Cloud by:

1. Creating a contract YAML that points to that dataset
2. Pushing the results of the contract onto Soda Cloud

{% hint style="warning" %}
**Soda does not support pushing a full data source configuration programmatically**. This flow will create an empty data source that needs to be configured later in Soda Cloud.
{% endhint %}

## Partially onboard a data source via CLI

This flow shows how to partially onboard a data source programmatically in order to finish setting it up in Soda Cloud.

{% stepper %}
{% step %}

### Set up your connections

Follow the [CLI reference](https://docs.soda.io/reference/cli-reference) to:

1. Perform [**installation**](https://docs.soda.io/reference/cli-reference#installation) **steps**
2. [**Connect to Soda Cloud**](https://docs.soda.io/reference/cli-reference#connect-to-soda-cloud)
3. [**Configure a data source**](https://docs.soda.io/reference/cli-reference#configure-a-data-source)
   {% endstep %}

{% step %}

### Create a contract

Run the following:

{% code overflow="wrap" %}

```shellscript
soda contract create --dataset datasource/db/schema/table --file contract.yaml --data-source ds_config.yml --soda-cloud sc_config.yml
```

{% endcode %}

{% hint style="warning" %}
Unlike the `create` command in the CLI reference, to push a data source via CLI **you must not use the `--use-agent` flag**.

**The `--use-agent` flag** would attempt to find the data source in Soda Cloud, which has not been yet set up in your environment at this time.
{% endhint %}

#### **When should I use the `--use-agent` flag?**

In some organizations, the data source Admin can create the data source connection in Soda Cloud without onboarding any datasets. Then, **engineers can create and publish new contracts to onboard datasets via CLI**. Since the data source exists already in Soda Cloud,  the `--use-agent` flag should be used so that the datasets are pushed from Soda Core onto the existing data source through the Agent.
{% endstep %}

{% step %}

### Test, verify & publish the contract

1. **Test that the contract is correct**

   ```shellscript
   soda contract test --contract contract.yaml
   ```
2. **Verify the contract**

   ```shellscript
   soda contract verify --contract contract.yaml --data-source ds_config.yml
   ```
3. **Publish the contract**

   ```shellscript
   soda contract publish --contract contract.yaml --soda-cloud sc_config.yml
   ```

{% endstep %}
{% endstepper %}

<i class="fa-octagon-check">:octagon-check:</i> After successfully publishing the contract, you will see a success output:

```
  __|  _ \|  \   \\
\__ \ (   |   | _ \\
____/\___/___/_/  _\\ CLI v4.0.4b24
Fetching datasets configurations from Soda Cloud for datasets '[DatasetIdentifier(data_source='CLI_testing', prefixes=['postgres', 'aldi_local'], dataset='retail_orders')]'
Verifying contract 📜 contract.yaml 🤞

### Contract results for CLI_testing/postgres/aldi_local/retail_orders
+-----------------+-----------------------------------+-------------------------------+-----------+---------------+   
| Column          | Check                             | Threshold                     | Outcome   | Diagnostics   |   
+=================+===================================+===============================+===========+===============+   
| [dataset-level] | Schema matches expected structure | level: fail                   | ✅ PASSED |               |   
|                 |                                   | must be less than or equal: 0 |           |               |   
+-----------------+-----------------------------------+-------------------------------+-----------+---------------+   
# Summary:
|----------------|---|----|
| Checks         | 1 |    |
| Passed         | 1 | ✅ |
| Failed         | 0 | ✅ |
| Warned         | 0 | ✅ |
| Not Evaluated  | 0 | ✅ |
| Excluded       | 0 | ✅ |
| Runtime Errors | 0 | ✅ |

👌 Results sent to Soda Cloud
To view the dataset on Soda Cloud, see https://cloud.us.soda.io/o/<datasetID>/datasets/ab1bc55d-c49a-441e-a0dc-c01857c71b21
Updating post processing stage 'diagnosticWarehouse' to state 'completed' for scan <scanID>
Updated post processing stage 'diagnosticWarehouse' to state 'completed' for scan <scanID>

```

## Complete onboarding via Soda Cloud

{% hint style="info" %}
A data source **must be connected to Soda Agent** to access contract verification in Soda Cloud. Connection to Soda Agent is performed via Soda Cloud.
{% endhint %}

* If you attempt to use contract verification, you will find the following warning:

  <figure><img src="https://1123167021-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FA2PmHkO5cBgeRPdiPPOG%2Fuploads%2F7N3amM2VBr0urjmVdKwT%2Fimage.png?alt=media&#x26;token=4f849563-2f0e-4242-b9af-665cf879cb5c" alt=""><figcaption></figcaption></figure>
* If you attempt to access Metric Monitoring capabilities in Soda Cloud, you will find the following warning:

  <figure><img src="https://1123167021-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FA2PmHkO5cBgeRPdiPPOG%2Fuploads%2FUxmoloUIT0qb9mmMeL9Z%2Fimage.png?alt=media&#x26;token=c13fc44c-a981-41ed-ba29-90119c8d51ae" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
**In order to finish the onboarding,** [**complete the connection in Soda Cloud**](https://docs.soda.io/onboard-datasets-on-soda-cloud#connect-a-data-source-onboarded-with-soda-core-to-an-agent)**.**
{% endhint %}

<br>

***

{% if visitor.claims.plan === 'free' %}
{% hint style="success" %}
You are **logged in to Soda** and seeing the **Free license** documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}

{% if visitor.claims.plan === 'teams' %}
{% hint style="success" %}
You are **logged in to Soda** and seeing the **Team license** documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}

{% if visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased' %}
{% hint style="success" %}
You are **logged in to Soda** and seeing the **Enterprise license** documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}

{% if !(visitor.claims.plan === 'free' || visitor.claims.plan === 'teams' || visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased') %}
{% hint style="info" %}
You are **not logged in to Soda** and are viewing the default public documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}
