# Configure edx-enterprise in tutor-14.1.2 (nutmeg.2)

**URL:** <https://discuss.openedx.org/t/configure-edx-enterprise-in-tutor-14-1-2-nutmeg-2/9015>\
**Category:** Tutor Help\
**Tags:** how-to, tutor\
**Created:** [December 27, 2022, 7:34am UTC](https://discuss.openedx.org/t/configure-edx-enterprise-in-tutor-14-1-2-nutmeg-2/9015 "2022-12-27T07:34:41Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![sahil](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/sahil/32/4643_2.png) [@sahil](https://discuss.openedx.org/u/sahil)\
**Post date:** [December 27, 2022, 7:34am UTC](https://discuss.openedx.org/t/configure-edx-enterprise-in-tutor-14-1-2-nutmeg-2/9015/1 "2022-12-27T07:34:42Z")

</div>

Hello All,

I’m trying to setup edx-enterprise on tutor version 14.1.2

I tried steps for it:

1. Installed and enabled discover plugin  
-tutor plugins enable discovery  
-tutor local quickstart

2. [https://discovery.lms-host/admin/catalogs/catalog/add/](https://discovery.lms-host/admin/catalogs/catalog/add/)  
Name: myCat  
Query: GET /api/v1/search/courses

3. Added new enterprise customer [https://lms-host/admin/enterprise/enterprisecustomer/](https://lms-host/admin/enterprise/enterprisecustomer/)

4. Added below flags in plugin:  
COURSE\_CATALOG\_API\_URL = “[https://discovery.lms-host](https://discovery.lms-host)”

5. Executed the below commands.  
tutor local run discovery ./manage.py refresh\_course\_metadata --partner\_code=openedx  
tutor local run discovery ./manage.py update\_index --disable-change-limit  
tutor local run lms ./manage.py lms create\_catalog\_integrations --enabled   
–internal\_api\_url=“[http://discovery.lms-host/api/v1](http://discovery.lms-host/api/v1)”   
–service\_username=lms\_catalog\_service\_user  
tutor local run lms ./manage.py lms cache\_programs

I’m getting the below error when I enroll the learner in the enterprise using admin.

> lms\_1 | Traceback (most recent call last):  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/core/handlers/exception.py”, line 47, in inner  
> lms\_1 | response = get\_response(request)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/core/handlers/base.py”, line 181, in \_get\_response  
> lms\_1 | response = wrapped\_callback(request, \*callback\_args, \*\*callback\_kwargs)  
> lms\_1 | File “/opt/pyenv/versions/3.8.12/lib/python3.8/contextlib.py”, line 75, in inner  
> lms\_1 | return func(\*args, \*\*kwds)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/utils/decorators.py”, line 130, in \_wrapped\_view  
> lms\_1 | response = view\_func(request, \*args, \*\*kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/views/decorators/cache.py”, line 44, in \_wrapped\_view\_func  
> lms\_1 | response = view\_func(request, \*args, \*\*kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/contrib/admin/sites.py”, line 232, in inner  
> lms\_1 | return view(request, \*args, \*\*kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/views/generic/base.py”, line 70, in view  
> lms\_1 | return self.dispatch(request, \*args, \*\*kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/views/generic/base.py”, line 98, in dispatch  
> lms\_1 | return handler(request, \*args, \*\*kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/enterprise/admin/views.py”, line 744, in post  
> lms\_1 | if manage\_learners\_form.is\_valid():  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/forms/forms.py”, line 175, in is\_valid  
> lms\_1 | return self.is\_bound and not self.errors  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/forms/forms.py”, line 170, in errors  
> lms\_1 | self.full\_clean()  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/forms/forms.py”, line 372, in full\_clean  
> lms\_1 | self.\_clean\_fields()  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/django/forms/forms.py”, line 393, in _clean\_fields  
> lms\_1 | value = getattr(self, 'clean_%s’ % name)()  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/enterprise/admin/forms.py”, line 206, in clean\_course  
> lms\_1 | course\_details = utils.validate\_course\_exists\_for\_enterprise(enterprise\_customer, course\_id)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/enterprise/utils.py”, line 2234, in validate\_course\_exists\_for\_enterprise  
> lms\_1 | if not enterprise\_customer.catalog\_contains\_course(course\_id):  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/enterprise/models.py”, line 615, in catalog\_contains\_course  
> lms\_1 | if EnterpriseCatalogApiClient().enterprise\_contains\_content\_items(self.uuid, [course\_run\_id]):  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/enterprise/api\_client/lms.py”, line 100, in inner  
> lms\_1 | return func(self, \*args, \*\*kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/enterprise/api\_client/enterprise\_catalog.py”, line 294, in enterprise\_contains\_content\_items  
> lms\_1 | return endpoint.contains\_content\_items.get(\*\*query\_params)[‘contains\_content\_items’]  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/slumber/ **init**.py”, line 155, in get  
> lms\_1 | resp = self.\_request(“GET”, params=kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/slumber/ **init**.py”, line 97, in \_request  
> lms\_1 | resp = self.\_store[“session”].request(method, url, data=data, params=params, files=files, headers=headers)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/requests/sessions.py”, line 529, in request  
> lms\_1 | resp = self.send(prep, \*\*send\_kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/requests/sessions.py”, line 645, in send  
> lms\_1 | r = adapter.send(request, \*\*kwargs)  
> lms\_1 | File “/openedx/venv/lib/python3.8/site-packages/requests/adapters.py”, line 519, in send  
> lms\_1 | raise ConnectionError(e, request=request)  
> lms\_1 | requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘enterprise.catalog.app’, port=18160): Max retries exceeded with url: /api/v1/enterprise-customer/4c70b45d-565c-4c2e-9b8d-1f36e544d2d1/contains\_content\_items/?course\_run\_ids=course-v1%3ALITHAN%2BADP%2BADP-IN0920-26NOV2021 (Caused by NewConnectionError(‘\<urllib3.connection.HTTPConnection object at 0x7f5c09085f10\>: Failed to establish a new connection: [Errno -2] Name or service not known’))  
> lms\_1 | [pid: 7|app: 0|req: 1/2] 172.20.0.6 () {66 vars in 3993 bytes} [Tue Dec 27 07:28:14 2022] POST /admin/enterprise/enterprisecustomer/4c70b45d-565c-4c2e-9b8d-1f36e544d2d1/manage\_learners =\> generated 12351 bytes in 1516 msecs (HTTP/1.1 500) 8 headers in 574 bytes (1 switches on core 0)

Any pointers or help identifying the issue is appreciated.

Thanks & Regards  
Sahil

---

<div class="post-metadata">

**Author:** ![khalilbsd](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.openedx.org/khalilbsd/32/4673_2.png) [@khalilbsd](https://discuss.openedx.org/u/khalilbsd)\
**Post date:** [December 30, 2022, 1:03pm UTC](https://discuss.openedx.org/t/configure-edx-enterprise-in-tutor-14-1-2-nutmeg-2/9015/2 "2022-12-30T13:03:51Z")

</div>

hello there ,  
unfortunately, you need to install a new plugin called enterprise catalog!

> **[GitHub - openedx/enterprise-catalog: A Django-based microservice for handling...](https://github.com/openedx/enterprise-catalog)**
>
> A Django-based microservice for handling Enterprise catalogs, associating enterprise customers with curated courses from the full course catalog. - GitHub - openedx/enterprise-catalog: A Django-bas...

there no much documentation regarding this service! to my understanding, they are trying to migrate the enterprise to stand alone outside of openedx instance! I’m currently in the process of trying to figure out its configuration! however please note what I figured out in these past weeks :  
you need to add a new subdomain running the new service for example: [enterprise-catalog.example.com](http://enterprise-catalog.example.com)  
be careful with the docker-compose file ! as you need to run the containers by yourself (tutor scripts will bring them down whenever you try : tutor local start -d or launch (quickstart))  
the new containers must have the same project name as the lms/cms/discovery etc there will be an os environment variable holding this name if i remember it will be: tutor\_local  
or the containers will not simply see/talk to each others .  
in order to add a new subdomain you need to locate the caddy file located in the .local/share/tutor/env/apps/caddy/Caddyfile and add an entry for the new subdomain ( a simple restart all will do the trick of updating the caddy container )  
you need to add ENTERPRISE\_CATALOG\_INTERNAL\_ROOT\_URL to your lms config file
