mcp-souschef 2.8.0__tar.gz → 3.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mcp_souschef-2.8.0/README.md → mcp_souschef-3.0.0/PKG-INFO +116 -8
- mcp_souschef-2.8.0/PKG-INFO → mcp_souschef-3.0.0/README.md +79 -44
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/pyproject.toml +14 -5
- mcp_souschef-3.0.0/souschef/__init__.py +57 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/assessment.py +1248 -57
- mcp_souschef-3.0.0/souschef/ci/common.py +126 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/github_actions.py +3 -92
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/gitlab_ci.py +2 -52
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/jenkins_pipeline.py +2 -59
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/cli.py +117 -8
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/playbook.py +259 -90
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/resource.py +12 -11
- mcp_souschef-3.0.0/souschef/converters/template.py +177 -0
- mcp_souschef-3.0.0/souschef/core/metrics.py +313 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/validation.py +53 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/deployment.py +61 -9
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/server.py +680 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/app.py +469 -351
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/pages/ai_settings.py +74 -8
- mcp_souschef-3.0.0/souschef/ui/pages/cookbook_analysis.py +3529 -0
- mcp_souschef-3.0.0/souschef/ui/pages/validation_reports.py +274 -0
- mcp_souschef-2.8.0/souschef/__init__.py +0 -25
- mcp_souschef-2.8.0/souschef/ui/pages/cookbook_analysis.py +0 -1360
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/LICENSE +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ci/__init__.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/__init__.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/cookbook_specific.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/cookbook_specific.py.backup +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/converters/habitat.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/__init__.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/constants.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/errors.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/path_utils.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/core/ruby_utils.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/filesystem/__init__.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/filesystem/operations.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/__init__.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/attributes.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/habitat.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/inspec.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/metadata.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/recipe.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/resource.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/parsers/template.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/profiling.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/__init__.py +0 -0
- {mcp_souschef-2.8.0 → mcp_souschef-3.0.0}/souschef/ui/health_check.py +0 -0
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mcp-souschef
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Summary: AI-powered MCP server for Chef to Ansible conversion
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: chef,ansible,migration,infrastructure,automation,mcp,ai,conversion
|
|
8
|
+
Author: SousChef Contributors
|
|
9
|
+
Requires-Python: >=3.13,<4.0
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Intended Audience :: System Administrators
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
|
+
Classifier: Topic :: System :: Systems Administration
|
|
20
|
+
Classifier: Topic :: Utilities
|
|
21
|
+
Provides-Extra: ui
|
|
22
|
+
Requires-Dist: anthropic (>=0.75.0)
|
|
23
|
+
Requires-Dist: click (>=8.1.0)
|
|
24
|
+
Requires-Dist: mcp (>=1.25.0)
|
|
25
|
+
Requires-Dist: openai (>=1.0.0)
|
|
26
|
+
Requires-Dist: pandas (>=2.0.0) ; extra == "ui"
|
|
27
|
+
Requires-Dist: plotly (>=5.0.0)
|
|
28
|
+
Requires-Dist: python-dotenv (>=1.2.1)
|
|
29
|
+
Requires-Dist: pyyaml (>=6.0.0)
|
|
30
|
+
Requires-Dist: streamlit (>=1.28.0)
|
|
31
|
+
Requires-Dist: zod (>=0.8.0)
|
|
32
|
+
Project-URL: Documentation, https://kpeacocke.github.io/souschef/
|
|
33
|
+
Project-URL: Homepage, https://github.com/kpeacocke/souschef
|
|
34
|
+
Project-URL: Repository, https://github.com/kpeacocke/souschef
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
|
|
1
37
|
# Chef to Ansible migration - SousChef MCP
|
|
2
38
|
|
|
3
39
|
An AI-powered MCP (Model Context Protocol) server that provides comprehensive Chef-to-Ansible migration capabilities for enterprise infrastructure transformation.
|
|
@@ -352,12 +388,55 @@ souschef ui --port 8080
|
|
|
352
388
|
docker build -t souschef-ui .
|
|
353
389
|
|
|
354
390
|
# Run the container
|
|
355
|
-
docker run -p
|
|
391
|
+
docker run -p 9999:9999 souschef-ui
|
|
356
392
|
|
|
357
393
|
# Or use docker-compose
|
|
358
394
|
docker-compose up
|
|
359
395
|
```
|
|
360
396
|
|
|
397
|
+
**Docker Environment Configuration:**
|
|
398
|
+
|
|
399
|
+
SousChef supports AI configuration via environment variables in Docker containers. Create a `.env` file in your project root:
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
# Copy the example environment file
|
|
403
|
+
cp .env.example .env
|
|
404
|
+
|
|
405
|
+
# Edit with your AI provider settings
|
|
406
|
+
nano .env
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**Example .env file:**
|
|
410
|
+
```dotenv
|
|
411
|
+
# AI Configuration
|
|
412
|
+
SOUSCHEF_AI_PROVIDER=Anthropic (Claude)
|
|
413
|
+
SOUSCHEF_AI_MODEL=claude-3-5-sonnet-20241022
|
|
414
|
+
SOUSCHEF_AI_API_KEY=your-api-key-here
|
|
415
|
+
SOUSCHEF_AI_BASE_URL=
|
|
416
|
+
SOUSCHEF_AI_PROJECT_ID=
|
|
417
|
+
SOUSCHEF_AI_TEMPERATURE=0.7
|
|
418
|
+
SOUSCHEF_AI_MAX_TOKENS=4000
|
|
419
|
+
|
|
420
|
+
# Streamlit Configuration (optional)
|
|
421
|
+
STREAMLIT_SERVER_PORT=9999
|
|
422
|
+
STREAMLIT_SERVER_HEADLESS=true
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Supported AI Providers:**
|
|
426
|
+
- `Anthropic (Claude)` - Anthropic Claude models
|
|
427
|
+
- `OpenAI (GPT)` - OpenAI GPT models
|
|
428
|
+
- `IBM Watsonx` - IBM Watsonx AI models
|
|
429
|
+
- `Red Hat Lightspeed` - Red Hat Lightspeed models
|
|
430
|
+
|
|
431
|
+
**Environment Variables:**
|
|
432
|
+
- `SOUSCHEF_AI_PROVIDER` - AI provider name (required)
|
|
433
|
+
- `SOUSCHEF_AI_MODEL` - Model name (required)
|
|
434
|
+
- `SOUSCHEF_AI_API_KEY` - API key for authentication (required)
|
|
435
|
+
- `SOUSCHEF_AI_BASE_URL` - Custom API base URL (optional)
|
|
436
|
+
- `SOUSCHEF_AI_PROJECT_ID` - Project ID for Watsonx (optional)
|
|
437
|
+
- `SOUSCHEF_AI_TEMPERATURE` - Model temperature 0.0-2.0 (optional, default: 0.7)
|
|
438
|
+
- `SOUSCHEF_AI_MAX_TOKENS` - Maximum tokens to generate (optional, default: 4000)
|
|
439
|
+
|
|
361
440
|
**Docker Compose (recommended for development):**
|
|
362
441
|
```yaml
|
|
363
442
|
version: '3.8'
|
|
@@ -365,7 +444,14 @@ services:
|
|
|
365
444
|
souschef-ui:
|
|
366
445
|
build: .
|
|
367
446
|
ports:
|
|
368
|
-
- "
|
|
447
|
+
- "9999:9999"
|
|
448
|
+
env_file:
|
|
449
|
+
- .env
|
|
450
|
+
environment:
|
|
451
|
+
- PYTHONPATH=/app
|
|
452
|
+
- STREAMLIT_SERVER_ADDRESS=0.0.0.0
|
|
453
|
+
- STREAMLIT_SERVER_PORT=9999
|
|
454
|
+
- STREAMLIT_SERVER_HEADLESS=true
|
|
369
455
|
restart: unless-stopped
|
|
370
456
|
```
|
|
371
457
|
|
|
@@ -636,6 +722,11 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
636
722
|
- **Interactive dependency mapping and visualization** with Plotly graphs and NetworkX analysis
|
|
637
723
|
- **Real-time progress tracking** for all analysis operations with Streamlit progress bars
|
|
638
724
|
- **Static graph visualization** with matplotlib for reports and documentation
|
|
725
|
+
- **Automated ERB to Jinja2 template conversion** - Converts Chef ERB templates to Ansible Jinja2 templates during cookbook conversion
|
|
726
|
+
- Converts ERB syntax to Jinja2: `<%= var %>` → `{{ var }}`, `<% if %>` → `{% if %}`
|
|
727
|
+
- Extracts template variables for validation and documentation
|
|
728
|
+
- Includes converted templates in downloadable playbook archives
|
|
729
|
+
- UI displays converted templates with variable lists and preview
|
|
639
730
|
|
|
640
731
|
### Planned
|
|
641
732
|
- 📅 Enhanced graph layout algorithms for large dependency networks (force-directed, hierarchical)
|
|
@@ -1361,12 +1452,28 @@ The project includes several VS Code tasks:
|
|
|
1361
1452
|
|
|
1362
1453
|
## Contributing
|
|
1363
1454
|
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1455
|
+
Thank you for your interest in contributing to SousChef!
|
|
1456
|
+
|
|
1457
|
+
**Before you start**, please read the [**Architecture Guide**](docs/ARCHITECTURE.md) to understand where different code belongs and why. This is essential for understanding how to structure your contributions.
|
|
1458
|
+
|
|
1459
|
+
For complete contributing guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md), which includes:
|
|
1460
|
+
- Development setup instructions
|
|
1461
|
+
- Code standards and quality tools
|
|
1462
|
+
- Testing requirements and patterns
|
|
1463
|
+
- Commit conventions and PR process
|
|
1464
|
+
- Release procedures
|
|
1465
|
+
|
|
1466
|
+
**Quick Checklist for Contributions:**
|
|
1467
|
+
1. Read [**docs/ARCHITECTURE.md**](docs/ARCHITECTURE.md) to understand module structure
|
|
1468
|
+
2. Ensure all tests pass: `poetry run pytest`
|
|
1469
|
+
3. Code passes linting: `poetry run ruff check .`
|
|
1470
|
+
4. Code is formatted: `poetry run ruff format .`
|
|
1471
|
+
5. Type hints are complete: `poetry run mypy souschef`
|
|
1472
|
+
6. Coverage maintained at 90%+
|
|
1473
|
+
7. All functions have docstrings
|
|
1474
|
+
8. Follow [conventional commits](CONTRIBUTING.md#commit-message-format)
|
|
1475
|
+
|
|
1476
|
+
Questions? Check [ARCHITECTURE.md](docs/ARCHITECTURE.md) for module responsibilities or [CONTRIBUTING.md](CONTRIBUTING.md) for the full developer guide.
|
|
1370
1477
|
|
|
1371
1478
|
## License
|
|
1372
1479
|
|
|
@@ -1375,3 +1482,4 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
1375
1482
|
---
|
|
1376
1483
|
|
|
1377
1484
|
**SousChef** - *Ansible automation, one recipe at a time.*
|
|
1485
|
+
|
|
@@ -1,38 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: mcp-souschef
|
|
3
|
-
Version: 2.8.0
|
|
4
|
-
Summary: AI-powered MCP server for Chef to Ansible conversion
|
|
5
|
-
License: MIT
|
|
6
|
-
License-File: LICENSE
|
|
7
|
-
Keywords: chef,ansible,migration,infrastructure,automation,mcp,ai,conversion
|
|
8
|
-
Author: SousChef Contributors
|
|
9
|
-
Requires-Python: >=3.14,<4.0
|
|
10
|
-
Classifier: Development Status :: 4 - Beta
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Intended Audience :: System Administrators
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
-
Classifier: Operating System :: OS Independent
|
|
15
|
-
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
-
Classifier: Topic :: System :: Systems Administration
|
|
19
|
-
Classifier: Topic :: Utilities
|
|
20
|
-
Provides-Extra: ui
|
|
21
|
-
Requires-Dist: anthropic (>=0.75.0)
|
|
22
|
-
Requires-Dist: click (>=8.1.0)
|
|
23
|
-
Requires-Dist: mcp (>=1.25.0)
|
|
24
|
-
Requires-Dist: openai (>=1.0.0)
|
|
25
|
-
Requires-Dist: pandas (>=2.0.0) ; extra == "ui"
|
|
26
|
-
Requires-Dist: plotly (>=5.0.0)
|
|
27
|
-
Requires-Dist: python-dotenv (>=1.2.1)
|
|
28
|
-
Requires-Dist: pyyaml (>=6.0.0)
|
|
29
|
-
Requires-Dist: streamlit (>=1.28.0)
|
|
30
|
-
Requires-Dist: zod (>=0.8.0)
|
|
31
|
-
Project-URL: Documentation, https://kpeacocke.github.io/souschef/
|
|
32
|
-
Project-URL: Homepage, https://github.com/kpeacocke/souschef
|
|
33
|
-
Project-URL: Repository, https://github.com/kpeacocke/souschef
|
|
34
|
-
Description-Content-Type: text/markdown
|
|
35
|
-
|
|
36
1
|
# Chef to Ansible migration - SousChef MCP
|
|
37
2
|
|
|
38
3
|
An AI-powered MCP (Model Context Protocol) server that provides comprehensive Chef-to-Ansible migration capabilities for enterprise infrastructure transformation.
|
|
@@ -387,12 +352,55 @@ souschef ui --port 8080
|
|
|
387
352
|
docker build -t souschef-ui .
|
|
388
353
|
|
|
389
354
|
# Run the container
|
|
390
|
-
docker run -p
|
|
355
|
+
docker run -p 9999:9999 souschef-ui
|
|
391
356
|
|
|
392
357
|
# Or use docker-compose
|
|
393
358
|
docker-compose up
|
|
394
359
|
```
|
|
395
360
|
|
|
361
|
+
**Docker Environment Configuration:**
|
|
362
|
+
|
|
363
|
+
SousChef supports AI configuration via environment variables in Docker containers. Create a `.env` file in your project root:
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
# Copy the example environment file
|
|
367
|
+
cp .env.example .env
|
|
368
|
+
|
|
369
|
+
# Edit with your AI provider settings
|
|
370
|
+
nano .env
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Example .env file:**
|
|
374
|
+
```dotenv
|
|
375
|
+
# AI Configuration
|
|
376
|
+
SOUSCHEF_AI_PROVIDER=Anthropic (Claude)
|
|
377
|
+
SOUSCHEF_AI_MODEL=claude-3-5-sonnet-20241022
|
|
378
|
+
SOUSCHEF_AI_API_KEY=your-api-key-here
|
|
379
|
+
SOUSCHEF_AI_BASE_URL=
|
|
380
|
+
SOUSCHEF_AI_PROJECT_ID=
|
|
381
|
+
SOUSCHEF_AI_TEMPERATURE=0.7
|
|
382
|
+
SOUSCHEF_AI_MAX_TOKENS=4000
|
|
383
|
+
|
|
384
|
+
# Streamlit Configuration (optional)
|
|
385
|
+
STREAMLIT_SERVER_PORT=9999
|
|
386
|
+
STREAMLIT_SERVER_HEADLESS=true
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**Supported AI Providers:**
|
|
390
|
+
- `Anthropic (Claude)` - Anthropic Claude models
|
|
391
|
+
- `OpenAI (GPT)` - OpenAI GPT models
|
|
392
|
+
- `IBM Watsonx` - IBM Watsonx AI models
|
|
393
|
+
- `Red Hat Lightspeed` - Red Hat Lightspeed models
|
|
394
|
+
|
|
395
|
+
**Environment Variables:**
|
|
396
|
+
- `SOUSCHEF_AI_PROVIDER` - AI provider name (required)
|
|
397
|
+
- `SOUSCHEF_AI_MODEL` - Model name (required)
|
|
398
|
+
- `SOUSCHEF_AI_API_KEY` - API key for authentication (required)
|
|
399
|
+
- `SOUSCHEF_AI_BASE_URL` - Custom API base URL (optional)
|
|
400
|
+
- `SOUSCHEF_AI_PROJECT_ID` - Project ID for Watsonx (optional)
|
|
401
|
+
- `SOUSCHEF_AI_TEMPERATURE` - Model temperature 0.0-2.0 (optional, default: 0.7)
|
|
402
|
+
- `SOUSCHEF_AI_MAX_TOKENS` - Maximum tokens to generate (optional, default: 4000)
|
|
403
|
+
|
|
396
404
|
**Docker Compose (recommended for development):**
|
|
397
405
|
```yaml
|
|
398
406
|
version: '3.8'
|
|
@@ -400,7 +408,14 @@ services:
|
|
|
400
408
|
souschef-ui:
|
|
401
409
|
build: .
|
|
402
410
|
ports:
|
|
403
|
-
- "
|
|
411
|
+
- "9999:9999"
|
|
412
|
+
env_file:
|
|
413
|
+
- .env
|
|
414
|
+
environment:
|
|
415
|
+
- PYTHONPATH=/app
|
|
416
|
+
- STREAMLIT_SERVER_ADDRESS=0.0.0.0
|
|
417
|
+
- STREAMLIT_SERVER_PORT=9999
|
|
418
|
+
- STREAMLIT_SERVER_HEADLESS=true
|
|
404
419
|
restart: unless-stopped
|
|
405
420
|
```
|
|
406
421
|
|
|
@@ -671,6 +686,11 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
671
686
|
- **Interactive dependency mapping and visualization** with Plotly graphs and NetworkX analysis
|
|
672
687
|
- **Real-time progress tracking** for all analysis operations with Streamlit progress bars
|
|
673
688
|
- **Static graph visualization** with matplotlib for reports and documentation
|
|
689
|
+
- **Automated ERB to Jinja2 template conversion** - Converts Chef ERB templates to Ansible Jinja2 templates during cookbook conversion
|
|
690
|
+
- Converts ERB syntax to Jinja2: `<%= var %>` → `{{ var }}`, `<% if %>` → `{% if %}`
|
|
691
|
+
- Extracts template variables for validation and documentation
|
|
692
|
+
- Includes converted templates in downloadable playbook archives
|
|
693
|
+
- UI displays converted templates with variable lists and preview
|
|
674
694
|
|
|
675
695
|
### Planned
|
|
676
696
|
- 📅 Enhanced graph layout algorithms for large dependency networks (force-directed, hierarchical)
|
|
@@ -1396,12 +1416,28 @@ The project includes several VS Code tasks:
|
|
|
1396
1416
|
|
|
1397
1417
|
## Contributing
|
|
1398
1418
|
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1419
|
+
Thank you for your interest in contributing to SousChef!
|
|
1420
|
+
|
|
1421
|
+
**Before you start**, please read the [**Architecture Guide**](docs/ARCHITECTURE.md) to understand where different code belongs and why. This is essential for understanding how to structure your contributions.
|
|
1422
|
+
|
|
1423
|
+
For complete contributing guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md), which includes:
|
|
1424
|
+
- Development setup instructions
|
|
1425
|
+
- Code standards and quality tools
|
|
1426
|
+
- Testing requirements and patterns
|
|
1427
|
+
- Commit conventions and PR process
|
|
1428
|
+
- Release procedures
|
|
1429
|
+
|
|
1430
|
+
**Quick Checklist for Contributions:**
|
|
1431
|
+
1. Read [**docs/ARCHITECTURE.md**](docs/ARCHITECTURE.md) to understand module structure
|
|
1432
|
+
2. Ensure all tests pass: `poetry run pytest`
|
|
1433
|
+
3. Code passes linting: `poetry run ruff check .`
|
|
1434
|
+
4. Code is formatted: `poetry run ruff format .`
|
|
1435
|
+
5. Type hints are complete: `poetry run mypy souschef`
|
|
1436
|
+
6. Coverage maintained at 90%+
|
|
1437
|
+
7. All functions have docstrings
|
|
1438
|
+
8. Follow [conventional commits](CONTRIBUTING.md#commit-message-format)
|
|
1439
|
+
|
|
1440
|
+
Questions? Check [ARCHITECTURE.md](docs/ARCHITECTURE.md) for module responsibilities or [CONTRIBUTING.md](CONTRIBUTING.md) for the full developer guide.
|
|
1405
1441
|
|
|
1406
1442
|
## License
|
|
1407
1443
|
|
|
@@ -1410,4 +1446,3 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
1410
1446
|
---
|
|
1411
1447
|
|
|
1412
1448
|
**SousChef** - *Ansible automation, one recipe at a time.*
|
|
1413
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "mcp-souschef"
|
|
3
|
-
version = "
|
|
3
|
+
version = "3.0.0"
|
|
4
4
|
description = "AI-powered MCP server for Chef to Ansible conversion"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
homepage = "https://github.com/kpeacocke/souschef"
|
|
@@ -10,12 +10,12 @@ keywords = ["chef", "ansible", "migration", "infrastructure", "automation", "mcp
|
|
|
10
10
|
authors = ["SousChef Contributors"]
|
|
11
11
|
license = "MIT"
|
|
12
12
|
packages = [{include = "souschef"}]
|
|
13
|
-
classifiers = ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Topic :: Utilities"]
|
|
13
|
+
classifiers = ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Topic :: Utilities"]
|
|
14
14
|
|
|
15
15
|
[tool.poetry.urls]
|
|
16
16
|
|
|
17
17
|
[tool.poetry.dependencies]
|
|
18
|
-
python = ">=3.
|
|
18
|
+
python = ">=3.13,<4.0"
|
|
19
19
|
anthropic = ">=0.75.0"
|
|
20
20
|
openai = ">=1.0.0"
|
|
21
21
|
click = ">=8.1.0"
|
|
@@ -50,7 +50,7 @@ mkdocstrings = {extras = ["python"], version = ">=0.26,<1.1"}
|
|
|
50
50
|
mkdocs-git-revision-date-localized-plugin = "^1.2.0"
|
|
51
51
|
streamlit = "^1.28.0"
|
|
52
52
|
networkx = "^3.2.0"
|
|
53
|
-
plotly = "
|
|
53
|
+
plotly = ">=5.17,<7.0"
|
|
54
54
|
matplotlib = "^3.8.0"
|
|
55
55
|
types-networkx = "^3.6.1.20251220"
|
|
56
56
|
|
|
@@ -79,6 +79,8 @@ ignore = ["D100", "D104", "D105", "D107", "D203", "D212"]
|
|
|
79
79
|
"souschef/parsers/validation.py" = ["E501"] # Long lines in validation messages
|
|
80
80
|
"souschef/converters/resource.py" = ["C901"] # Allow complex function for resource conversion logic
|
|
81
81
|
"souschef/deployment.py" = ["ISC003"] # Allow explicit string concatenation
|
|
82
|
+
"souschef/ui/app.py" = ["E402"] # Allow imports after path manipulation
|
|
83
|
+
"souschef/ui/pages/cookbook_analysis.py" = ["C901"] # Allow complex functions in UI code
|
|
82
84
|
|
|
83
85
|
[tool.pytest.ini_options]
|
|
84
86
|
minversion = "6.0"
|
|
@@ -116,7 +118,7 @@ source = [
|
|
|
116
118
|
backup = false
|
|
117
119
|
|
|
118
120
|
[tool.mypy]
|
|
119
|
-
python_version = "3.
|
|
121
|
+
python_version = "3.13"
|
|
120
122
|
warn_return_any = true
|
|
121
123
|
warn_unused_configs = true
|
|
122
124
|
disallow_untyped_defs = false
|
|
@@ -130,3 +132,10 @@ no_implicit_optional = true
|
|
|
130
132
|
module = "tests.*"
|
|
131
133
|
disallow_untyped_defs = false
|
|
132
134
|
check_untyped_defs = false
|
|
135
|
+
|
|
136
|
+
[[tool.mypy.overrides]]
|
|
137
|
+
module = [
|
|
138
|
+
"plotly.*",
|
|
139
|
+
"streamlit.*",
|
|
140
|
+
]
|
|
141
|
+
ignore_missing_imports = true
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""SousChef: AI-powered Chef to Ansible converter."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import tomllib
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Read version from pyproject.toml
|
|
9
|
+
def _get_version() -> str:
|
|
10
|
+
"""Get version from pyproject.toml."""
|
|
11
|
+
pyproject_path = Path(__file__).parent.parent / "pyproject.toml"
|
|
12
|
+
try:
|
|
13
|
+
with pyproject_path.open("rb") as f:
|
|
14
|
+
data = tomllib.load(f)
|
|
15
|
+
version = data.get("tool", {}).get("poetry", {}).get("version")
|
|
16
|
+
return str(version) if version else "unknown"
|
|
17
|
+
except OSError:
|
|
18
|
+
return "unknown"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
__version__ = _get_version()
|
|
22
|
+
|
|
23
|
+
from souschef.assessment import ( # noqa: E402
|
|
24
|
+
analyse_cookbook_dependencies,
|
|
25
|
+
assess_chef_migration_complexity,
|
|
26
|
+
generate_migration_plan,
|
|
27
|
+
generate_migration_report,
|
|
28
|
+
validate_conversion,
|
|
29
|
+
)
|
|
30
|
+
from souschef.deployment import ( # noqa: E402
|
|
31
|
+
analyse_chef_application_patterns,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Import server functions only if MCP is available
|
|
35
|
+
try:
|
|
36
|
+
from souschef.server import (
|
|
37
|
+
analyse_chef_search_patterns,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
_server_available = True
|
|
41
|
+
except ImportError:
|
|
42
|
+
_server_available = False
|
|
43
|
+
|
|
44
|
+
# Define a placeholder function for when MCP is not available
|
|
45
|
+
def analyse_chef_search_patterns(*args, **kwargs):
|
|
46
|
+
raise NotImplementedError("MCP server not available")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
__all__ = [
|
|
50
|
+
"analyse_cookbook_dependencies",
|
|
51
|
+
"assess_chef_migration_complexity",
|
|
52
|
+
"generate_migration_plan",
|
|
53
|
+
"generate_migration_report",
|
|
54
|
+
"validate_conversion",
|
|
55
|
+
"analyse_chef_application_patterns",
|
|
56
|
+
"analyse_chef_search_patterns",
|
|
57
|
+
]
|