mcp-souschef 2.5.3__py3-none-any.whl → 3.0.0__py3-none-any.whl
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.5.3.dist-info → mcp_souschef-3.0.0.dist-info}/METADATA +135 -28
- mcp_souschef-3.0.0.dist-info/RECORD +46 -0
- {mcp_souschef-2.5.3.dist-info → mcp_souschef-3.0.0.dist-info}/WHEEL +1 -1
- souschef/__init__.py +43 -3
- souschef/assessment.py +1260 -69
- souschef/ci/common.py +126 -0
- souschef/ci/github_actions.py +4 -93
- souschef/ci/gitlab_ci.py +3 -53
- souschef/ci/jenkins_pipeline.py +3 -60
- souschef/cli.py +129 -20
- souschef/converters/__init__.py +2 -2
- souschef/converters/cookbook_specific.py +125 -0
- souschef/converters/cookbook_specific.py.backup +109 -0
- souschef/converters/playbook.py +1022 -15
- souschef/converters/resource.py +113 -10
- souschef/converters/template.py +177 -0
- souschef/core/constants.py +13 -0
- souschef/core/metrics.py +313 -0
- souschef/core/path_utils.py +12 -9
- souschef/core/validation.py +53 -0
- souschef/deployment.py +85 -33
- souschef/parsers/attributes.py +397 -32
- souschef/parsers/recipe.py +48 -10
- souschef/server.py +715 -37
- souschef/ui/app.py +1658 -379
- souschef/ui/health_check.py +36 -0
- souschef/ui/pages/ai_settings.py +563 -0
- souschef/ui/pages/cookbook_analysis.py +3270 -166
- souschef/ui/pages/validation_reports.py +274 -0
- mcp_souschef-2.5.3.dist-info/RECORD +0 -38
- {mcp_souschef-2.5.3.dist-info → mcp_souschef-3.0.0.dist-info}/entry_points.txt +0 -0
- {mcp_souschef-2.5.3.dist-info → mcp_souschef-3.0.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,31 +1,44 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-souschef
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
4
4
|
Summary: AI-powered MCP server for Chef to Ansible conversion
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
7
|
+
Keywords: chef,ansible,migration,infrastructure,automation,mcp,ai,conversion
|
|
7
8
|
Author: SousChef Contributors
|
|
8
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.13,<4.0
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Intended Audience :: System Administrators
|
|
9
13
|
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
10
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
11
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
|
|
12
21
|
Provides-Extra: ui
|
|
13
22
|
Requires-Dist: anthropic (>=0.75.0)
|
|
14
23
|
Requires-Dist: click (>=8.1.0)
|
|
15
24
|
Requires-Dist: mcp (>=1.25.0)
|
|
25
|
+
Requires-Dist: openai (>=1.0.0)
|
|
16
26
|
Requires-Dist: pandas (>=2.0.0) ; extra == "ui"
|
|
17
27
|
Requires-Dist: plotly (>=5.0.0)
|
|
18
28
|
Requires-Dist: python-dotenv (>=1.2.1)
|
|
19
29
|
Requires-Dist: pyyaml (>=6.0.0)
|
|
20
30
|
Requires-Dist: streamlit (>=1.28.0)
|
|
21
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
|
|
22
35
|
Description-Content-Type: text/markdown
|
|
23
36
|
|
|
24
37
|
# Chef to Ansible migration - SousChef MCP
|
|
25
38
|
|
|
26
39
|
An AI-powered MCP (Model Context Protocol) server that provides comprehensive Chef-to-Ansible migration capabilities for enterprise infrastructure transformation.
|
|
27
40
|
|
|
28
|
-
[](https://github.com/kpeacocke/souschef/releases)
|
|
29
42
|
[](https://www.python.org/downloads/)
|
|
30
43
|
[](https://opensource.org/licenses/MIT)
|
|
31
44
|
[](htmlcov/index.html)
|
|
@@ -37,17 +50,17 @@ An AI-powered MCP (Model Context Protocol) server that provides comprehensive Ch
|
|
|
37
50
|
|
|
38
51
|
## Overview - Chef to Ansible features
|
|
39
52
|
|
|
40
|
-
SousChef is a complete enterprise-grade migration platform with **
|
|
53
|
+
SousChef is a complete enterprise-grade migration platform with **32 primary MCP tools** organised across **10 major capability areas** to facilitate Chef-to-Ansible AWX/AAP migrations. From cookbook analysis to deployment pattern conversion, including Chef Habitat to containerised deployments and CI/CD pipeline generation, SousChef provides everything needed for a successful infrastructure automation migration.
|
|
41
54
|
|
|
42
55
|
### About Tool Counts
|
|
43
56
|
|
|
44
|
-
**Why
|
|
57
|
+
**Why 32 tools in the documentation but more in the server?**
|
|
45
58
|
|
|
46
|
-
The MCP server provides **37 total tools** (35 public + 2 internal). This documentation focuses on the **
|
|
59
|
+
The MCP server provides **37 total tools** (35 public + 2 internal). This documentation focuses on the **32 primary user-facing tools** that cover the main migration capabilities. The remaining 3 tools are low-level filesystem operations and helper utilities used internally by the main tools.
|
|
47
60
|
|
|
48
61
|
As a user, you'll primarily interact with the 27 documented tools. Your AI assistant may use the additional tools automatically when needed, but you don't need to know about them for successful migrations.
|
|
49
62
|
|
|
50
|
-
>
|
|
63
|
+
> **For developers:** See `souschef/server.py` for the complete list of all 37 registered tools.
|
|
51
64
|
|
|
52
65
|
## Model Agnostic - Works with Any AI Model
|
|
53
66
|
|
|
@@ -95,7 +108,7 @@ Complete cookbook introspection and analysis tools:
|
|
|
95
108
|
- **list_directory** - Navigate and explore cookbook directory structures
|
|
96
109
|
- **read_file** - Read cookbook files with error handling
|
|
97
110
|
- **read_cookbook_metadata** - Parse metadata.rb files for dependencies and cookbook information
|
|
98
|
-
- **parse_recipe** -
|
|
111
|
+
- **parse_recipe** - Analyse Chef recipes and extract resources, actions, and properties
|
|
99
112
|
- **parse_attributes** - Parse attribute files with **advanced precedence resolution** (6 levels: default, force_default, normal, override, force_override, automatic)
|
|
100
113
|
- **list_cookbook_structure** - Display complete cookbook directory hierarchy
|
|
101
114
|
|
|
@@ -116,7 +129,7 @@ Convert Chef search patterns to dynamic Ansible inventory:
|
|
|
116
129
|
|
|
117
130
|
- **convert_chef_search_to_inventory** - Transform Chef search queries to Ansible inventory groups
|
|
118
131
|
- **generate_dynamic_inventory_script** - Create dynamic inventory scripts from Chef server queries
|
|
119
|
-
- **
|
|
132
|
+
- **analyse_chef_search_patterns** - Discover and analyse search usage in cookbooks
|
|
120
133
|
|
|
121
134
|
### 4. InSpec Integration & Validation
|
|
122
135
|
Complete InSpec-to-Ansible testing pipeline:
|
|
@@ -130,14 +143,14 @@ Chef data bags to Ansible vars/vault conversion:
|
|
|
130
143
|
|
|
131
144
|
- **convert_chef_databag_to_vars** - Transform data bags to Ansible variable files
|
|
132
145
|
- **generate_ansible_vault_from_databags** - Convert encrypted data bags to Ansible Vault
|
|
133
|
-
- **
|
|
146
|
+
- **analyse_chef_databag_usage** - Analyse data bag usage patterns in cookbooks
|
|
134
147
|
|
|
135
148
|
### 6. Environment & Configuration Management
|
|
136
149
|
Chef environments to Ansible inventory groups:
|
|
137
150
|
|
|
138
151
|
- **convert_chef_environment_to_inventory_group** - Transform Chef environments to inventory
|
|
139
152
|
- **generate_inventory_from_chef_environments** - Generate complete inventory from environments
|
|
140
|
-
- **
|
|
153
|
+
- **analyse_chef_environment_usage** - Analyse environment usage in cookbooks
|
|
141
154
|
|
|
142
155
|
### 7. AWX/Ansible Automation Platform Integration
|
|
143
156
|
Enterprise AWX/AAP configuration generation:
|
|
@@ -263,10 +276,10 @@ Output formats:
|
|
|
263
276
|
- **json**: Structured JSON for programmatic processing
|
|
264
277
|
- **summary**: Quick overview with counts only
|
|
265
278
|
|
|
266
|
-
- **
|
|
279
|
+
- **analyse_chef_application_patterns** - Identify application deployment patterns
|
|
267
280
|
- **assess_chef_migration_complexity** - Comprehensive migration complexity assessment
|
|
268
281
|
- **generate_migration_plan** - Create detailed migration execution plans
|
|
269
|
-
- **
|
|
282
|
+
- **analyse_cookbook_dependencies** - Analyse dependencies and migration order
|
|
270
283
|
- **generate_migration_report** - Generate executive and technical migration reports
|
|
271
284
|
|
|
272
285
|
## Migration Workflow
|
|
@@ -276,8 +289,8 @@ Output formats:
|
|
|
276
289
|
# Assess migration complexity
|
|
277
290
|
assess_chef_migration_complexity /path/to/cookbooks
|
|
278
291
|
|
|
279
|
-
#
|
|
280
|
-
|
|
292
|
+
# Analyse cookbook dependencies
|
|
293
|
+
analyse_cookbook_dependencies /path/to/cookbook
|
|
281
294
|
|
|
282
295
|
# Generate migration plan
|
|
283
296
|
generate_migration_plan '{\"cookbooks\": [\"/path/to/cookbook1\", \"/path/to/cookbook2\"]}'
|
|
@@ -369,6 +382,79 @@ souschef ui
|
|
|
369
382
|
souschef ui --port 8080
|
|
370
383
|
```
|
|
371
384
|
|
|
385
|
+
**Run in Docker:**
|
|
386
|
+
```bash
|
|
387
|
+
# Build the image
|
|
388
|
+
docker build -t souschef-ui .
|
|
389
|
+
|
|
390
|
+
# Run the container
|
|
391
|
+
docker run -p 9999:9999 souschef-ui
|
|
392
|
+
|
|
393
|
+
# Or use docker-compose
|
|
394
|
+
docker-compose up
|
|
395
|
+
```
|
|
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
|
+
|
|
440
|
+
**Docker Compose (recommended for development):**
|
|
441
|
+
```yaml
|
|
442
|
+
version: '3.8'
|
|
443
|
+
services:
|
|
444
|
+
souschef-ui:
|
|
445
|
+
build: .
|
|
446
|
+
ports:
|
|
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
|
|
455
|
+
restart: unless-stopped
|
|
456
|
+
```
|
|
457
|
+
|
|
372
458
|
**Features:**
|
|
373
459
|
- Clean, professional design matching documentation standards
|
|
374
460
|
- Real-time cookbook analysis with progress indicators
|
|
@@ -592,7 +678,7 @@ Each MCP tool includes comprehensive documentation:
|
|
|
592
678
|
- **[Testing Strategy Guide](docs/testing-strategy.md)** - Validation and testing approaches
|
|
593
679
|
- **[Best Practices](docs/best-practices.md)** - Recommended patterns and approaches
|
|
594
680
|
|
|
595
|
-
##
|
|
681
|
+
## Contributing
|
|
596
682
|
|
|
597
683
|
We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for:
|
|
598
684
|
- Development setup and workflow
|
|
@@ -600,13 +686,13 @@ We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for:
|
|
|
600
686
|
- Pull request process
|
|
601
687
|
- Issue reporting guidelines
|
|
602
688
|
|
|
603
|
-
##
|
|
689
|
+
## License
|
|
604
690
|
|
|
605
691
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
606
692
|
|
|
607
693
|
## Roadmap
|
|
608
694
|
|
|
609
|
-
### Completed
|
|
695
|
+
### Completed
|
|
610
696
|
- Complete Chef cookbook parsing (recipes, attributes, metadata, templates)
|
|
611
697
|
- InSpec profile parsing and conversion to Testinfra/Ansible tests
|
|
612
698
|
- Chef resource to Ansible task conversion with module mapping
|
|
@@ -636,8 +722,13 @@ 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
|
-
### Planned
|
|
731
|
+
### Planned
|
|
641
732
|
- 📅 Enhanced graph layout algorithms for large dependency networks (force-directed, hierarchical)
|
|
642
733
|
- 📅 Export functionality for graphs (PNG, SVG, PDF formats)
|
|
643
734
|
- 📅 UI configuration options and themes
|
|
@@ -649,7 +740,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
649
740
|
- 📅 Migration templates and presets
|
|
650
741
|
- 📅 Terraform provider for infrastructure state management
|
|
651
742
|
|
|
652
|
-
##
|
|
743
|
+
## Support & Community
|
|
653
744
|
|
|
654
745
|
- **Issues**: [GitHub Issues](https://github.com/kpeacocke/souschef/issues)
|
|
655
746
|
- **Discussions**: [GitHub Discussions](https://github.com/kpeacocke/souschef/discussions)
|
|
@@ -657,7 +748,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
657
748
|
|
|
658
749
|
---
|
|
659
750
|
|
|
660
|
-
**SousChef** - *Transforming infrastructure automation, one recipe at a time.*
|
|
751
|
+
**SousChef** - *Transforming infrastructure automation, one recipe at a time.*
|
|
661
752
|
desc 'Ensure package nginx is properly configured'
|
|
662
753
|
impact 1.0
|
|
663
754
|
|
|
@@ -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
|
|
|
@@ -1374,5 +1481,5 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
|
1374
1481
|
|
|
1375
1482
|
---
|
|
1376
1483
|
|
|
1377
|
-
**SousChef** - *Ansible automation, one recipe at a time.*
|
|
1484
|
+
**SousChef** - *Ansible automation, one recipe at a time.*
|
|
1378
1485
|
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
souschef/__init__.py,sha256=Wh2DPfy1eWvoA8u1fNr_bY5TPEJvHZMVJ76TtxpmPxM,1521
|
|
2
|
+
souschef/assessment.py,sha256=YOv-EgZHmiBV9IiCxNOi4fYwGl8_0ntoU2kKMgERUTc,93256
|
|
3
|
+
souschef/ci/__init__.py,sha256=GHaqDk4auB2kI7_fQtF2FRg5nP-iX6wJchj_uTlXcYg,411
|
|
4
|
+
souschef/ci/common.py,sha256=kDqIC9cTUN398NgM29cn8HmMjckxvEQ5ENclOZRS8fw,4746
|
|
5
|
+
souschef/ci/github_actions.py,sha256=EVnnOPTLCeUmTfR-acpLp-c_dxapMfrrDWaK4SSBkdM,7818
|
|
6
|
+
souschef/ci/gitlab_ci.py,sha256=4FcK8edci3ixuiUtYb6EFaAfsqjz0OBmW-lyPLH3YzY,6708
|
|
7
|
+
souschef/ci/jenkins_pipeline.py,sha256=XEuZrVKVmOlQOKucgGcd3vhAFh5qT05ILNnjKjkqTPU,7362
|
|
8
|
+
souschef/cli.py,sha256=yB6xo8YqDEWwTgD0RHGHcWFfOrK6fIKM7CRxDcGYgQg,37291
|
|
9
|
+
souschef/converters/__init__.py,sha256=kkPm758XiFDdUYvdVPAVjssFvf15LasJcob1EY1EMIs,681
|
|
10
|
+
souschef/converters/cookbook_specific.py,sha256=ZvE9-bZtyXuf2E3HW4E9_GWzAqtm7e4YHj9qm1Xu_XI,3767
|
|
11
|
+
souschef/converters/cookbook_specific.py.backup,sha256=9XycZz6oNNTEtLINo0hHNR3df-pbZIkLprhLniE2ENI,3468
|
|
12
|
+
souschef/converters/habitat.py,sha256=4eVGAcX0576zLXW9yqYvuaRxOK2g6BOIJo_ws-PonHU,22516
|
|
13
|
+
souschef/converters/playbook.py,sha256=Ll6gAmUNr30LYGRY3p2eT28knvoKl1LuMI-WxaZZ8PY,91909
|
|
14
|
+
souschef/converters/resource.py,sha256=NYMcp1-obg_ad_XPuYDuUH_0j65agRbAeWzXPfbSi5c,13570
|
|
15
|
+
souschef/converters/template.py,sha256=swX7LpWrKZgFtg6MaR7rltShBkPDbQAb65d1NF_nILo,5447
|
|
16
|
+
souschef/core/__init__.py,sha256=80a0G6wQGfh-Z7U1gsFaeC97bM4sp_3YGil-lN02Pl0,1894
|
|
17
|
+
souschef/core/constants.py,sha256=AyIpc9cJjQEDc1yOcoKc_2-cJB4PekSpPKEK2S9jDl8,5122
|
|
18
|
+
souschef/core/errors.py,sha256=zj_LHDRxUvHmcs-nZjOWu4B_MhY5WVq2okyZOxyycCI,8605
|
|
19
|
+
souschef/core/metrics.py,sha256=k56opuVmRorrBwErbxLgXu_GkfGZXA_rEfhcsHs1JHI,9850
|
|
20
|
+
souschef/core/path_utils.py,sha256=2hG6joupZR_08MMpHHbv2KKOFu-8tMafuQMqV0_1Nqw,1790
|
|
21
|
+
souschef/core/ruby_utils.py,sha256=vUeFZBdjbFFFJlwo4fIboR23rXmbcYL2Tztt4RYhps0,1043
|
|
22
|
+
souschef/core/validation.py,sha256=DXfkm1p5prSAJ-Oruk5JekNiDFI49Dql1bGEzKymYXs,19158
|
|
23
|
+
souschef/deployment.py,sha256=ZCrVK5Ik4TbVfoJ3dS1-6FNUzxfIE6kni5Fnj3rIbCk,61908
|
|
24
|
+
souschef/filesystem/__init__.py,sha256=2H7Pdeedz0MfmgpRlmii_vx61qr0jtxFndT0APPm6Qs,142
|
|
25
|
+
souschef/filesystem/operations.py,sha256=OMMozBfV_o70b47KioiZ2i6HViiUQPE5mVBeKcKFepo,1654
|
|
26
|
+
souschef/parsers/__init__.py,sha256=gF-vPslzs9iLxsaDzFnWDPpYFDAIwyAifjUwzYurPLg,1104
|
|
27
|
+
souschef/parsers/attributes.py,sha256=JmgFaYjlT0i2__hCk6hSqZRjq4xJaTdGsBDgHEu3ItY,18239
|
|
28
|
+
souschef/parsers/habitat.py,sha256=CtVgLfmpo7SLp-ADyR-DXRYaRUur3bwJjlnpLyocMhc,10483
|
|
29
|
+
souschef/parsers/inspec.py,sha256=zhlIDZmE6A9qws5gnrLxhGGBfHOebNTLWpZZI-XXTkU,34209
|
|
30
|
+
souschef/parsers/metadata.py,sha256=laSxlsebsgTzRDM_B8eIXddeApbR4ATm-W4GAGucZpc,6324
|
|
31
|
+
souschef/parsers/recipe.py,sha256=guhEttS_AyT2kckbde3_-kAyGoR4JyFMNZFAP5V1XIM,7090
|
|
32
|
+
souschef/parsers/resource.py,sha256=EHxmojbQ7Hx5GsL5-x9mFBYk3FhGTpx-qw1uUVKQkRo,5348
|
|
33
|
+
souschef/parsers/template.py,sha256=iOHMoQH7KkPzigTyyoxav8rb2ENYmfxgcvKGqvoYkgU,10532
|
|
34
|
+
souschef/profiling.py,sha256=a6Pn57CZR3UPR1YIY8gfbuTPRuPkFrfIFBmctOcaZgY,17315
|
|
35
|
+
souschef/server.py,sha256=JJyGSAHzbMxL2PMJVdlLlmNjXESjo6MUmjniNXGdSnc,111463
|
|
36
|
+
souschef/ui/__init__.py,sha256=U3W6X4ww7CxQVuetcocObWn5iY6lUFiNX7WoDBJeD34,195
|
|
37
|
+
souschef/ui/app.py,sha256=DlUeYP7eqw76JqIGGHCb13kP1qzq0Rj4X1pEN1_eW-Y,101409
|
|
38
|
+
souschef/ui/health_check.py,sha256=mEzec8L6XPRekOBAXngqQz5dnzal-a4p3D70mkPriiA,903
|
|
39
|
+
souschef/ui/pages/ai_settings.py,sha256=tIwgWBqxCEqFykmrLRPiVQjl-m-I1Mbq0RoB1YA5faM,17774
|
|
40
|
+
souschef/ui/pages/cookbook_analysis.py,sha256=92LRrRMi_YbjOLN-zhNH4ZYnO0HK_OMA--CPSYn2I1E,123424
|
|
41
|
+
souschef/ui/pages/validation_reports.py,sha256=R3xHTJb_y2b0tI8N0qPF1oS4f9ZVb539_82dj5nmmxA,7593
|
|
42
|
+
mcp_souschef-3.0.0.dist-info/METADATA,sha256=B96FJM5QKIJCGLMaXqSrR5NLue-3Y9x8nnigYvcuYHw,54133
|
|
43
|
+
mcp_souschef-3.0.0.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
|
|
44
|
+
mcp_souschef-3.0.0.dist-info/entry_points.txt,sha256=NVSk61tLG4W0xEkWGOMXAVCIUyodyZCY_j3Z_0m6rkQ,80
|
|
45
|
+
mcp_souschef-3.0.0.dist-info/licenses/LICENSE,sha256=t31dYSuvYYNw6trj-coWSsLK-Tg_Iyl8ObcolQcrUKM,1078
|
|
46
|
+
mcp_souschef-3.0.0.dist-info/RECORD,,
|
souschef/__init__.py
CHANGED
|
@@ -1,17 +1,57 @@
|
|
|
1
1
|
"""SousChef: AI-powered Chef to Ansible converter."""
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
|
|
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,
|
|
5
25
|
assess_chef_migration_complexity,
|
|
6
26
|
generate_migration_plan,
|
|
7
27
|
generate_migration_report,
|
|
8
28
|
validate_conversion,
|
|
9
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
|
+
|
|
10
48
|
|
|
11
49
|
__all__ = [
|
|
12
|
-
"
|
|
50
|
+
"analyse_cookbook_dependencies",
|
|
13
51
|
"assess_chef_migration_complexity",
|
|
14
52
|
"generate_migration_plan",
|
|
15
53
|
"generate_migration_report",
|
|
16
54
|
"validate_conversion",
|
|
55
|
+
"analyse_chef_application_patterns",
|
|
56
|
+
"analyse_chef_search_patterns",
|
|
17
57
|
]
|