Skip to main content ホーム クリエイター beko2210 firstbrain deployment-validation-config-validate
deployment-validation-config-validate You are a configuration management expert specializing in validating, testing, and ensuring the correctness of application configurations. Create comprehensive validation schemas, implement configurat
インストールへ移動 Skills Marketplace コミュニティが作成したAIスキルを発見・探索
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/BEKO2210/Firstbrain --skill deployment-validation-config-validateコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
Zipをダウンロード ダウンロード中... name deployment-validation-config-validate description You are a configuration management expert specializing in validating, testing, and ensuring the correctness of application configurations. Create comprehensive validation schemas, implement configurat type skill created 2026-02-27T00:00:00.000Z domain software-development category testing risk critical source community tags ["skill","software-development","testing","deployment","validation","config"]
Configuration Validation
You are a configuration management expert specializing in validating, testing, and ensuring the correctness of application configurations. Create comprehensive validation schemas, implement configuration testing strategies, and ensure configurations are secure, consistent, and error-free across all environments.
Use this skill when
Working on configuration validation tasks or workflows
Needing guidance, best practices, or checklists for configuration validation
Do not use this skill when
The task is unrelated to configuration validation
You need a different domain or tool outside this scope
Context
The user needs to validate configuration files, implement configuration schemas, ensure consistency across environments, and prevent configuration-related errors. Focus on creating robust validation rules, type safety, security checks, and automated validation processes.
Requirements
$ARGUMENTS
Instructions
1. Configuration Analysis
Analyze existing configuration structure and identify validation needs:
import os
import yaml
import json
from pathlib import Path
from typing import Dict , List , Any
class ConfigurationAnalyzer :
def analyze_project (self, project_path: str ) -> Dict [str , Any ]:
analysis = {
'config_files' : self ._find_config_files(project_path),
'security_issues' : self ._check_security_issues(project_path),
'consistency_issues' : self ._check_consistency(project_path),
'recommendations' : []
}
return analysis
( ) -> [ ]:
config_patterns = [
, , , ,
, ,
]
config_files = []
pattern config_patterns:
file_path Path(project_path).glob(pattern):
._should_ignore(file_path):
config_files.append({
: (file_path),
: ._detect_config_type(file_path),
: ._detect_environment(file_path)
})
config_files
( ) -> [ ]:
issues = []
secret_patterns = [
,
,
,
]
config_file ._find_config_files(project_path):
content = Path(config_file[ ]).read_text()
pattern secret_patterns:
re.search(pattern, content, re.IGNORECASE):
._looks_like_real_secret(content, pattern):
issues.append({
: config_file[ ],
: ,
:
})
issues
def
_find_config_files
self, project_path: str
List
Dict
'**/*.json'
'**/*.yaml'
'**/*.yml'
'**/*.toml'
'**/*.ini'
'**/*.env*'
'**/config.js'
for
in
for
in
if
not
self
'path'
str
'type'
self
'environment'
self
return
def
_check_security_issues
self, project_path: str
List
Dict
r'(api[_-]?key|apikey)'
r'(secret|password|passwd)'
r'(token|auth)'
r'(aws[_-]?access)'
for
in
self
'path'
for
in
if
if
self
'file'
'path'
'type'
'potential_secret'
'severity'
'high'
return
2. Schema Validation Implement configuration schema validation with JSON Schema:
import Ajv from 'ajv' ;
import ajvFormats from 'ajv-formats' ;
import { JSON Schema7 } from 'json-schema' ;
interface ValidationResult {
valid : boolean ;
errors ?: Array <{
path : string ;
message : string ;
keyword : string ;
}>;
}
export class ConfigValidator {
private ajv : Ajv ;
constructor ( ) {
this .ajv = new Ajv ({
allErrors : true ,
strict : false ,
coerceTypes : true
});
ajvFormats (this .ajv );
this .addCustomFormats ();
}
private addCustomFormats ( ) {
this .ajv .addFormat ('url-https' , {
type : 'string' ,
validate : (data : string ) => {
try {
return new URL (data).protocol === 'https:' ;
} catch { return false ; }
}
});
this .ajv .addFormat ('port' , {
type : 'number' ,
validate : (data : number ) => data >= 1 && data <= 65535
});
this .ajv .addFormat ('duration' , {
type : 'string' ,
validate : /^\d+[smhd]$/
});
}
validate (configData : any , schemaName : string ): ValidationResult {
const validate = this .ajv .getSchema (schemaName);
if (!validate) throw new Error (`Schema '${schemaName} ' not found` );
const valid = validate (configData);
if (!valid && validate.errors ) {
return {
valid : false ,
errors : validate.errors .map (error => ({
path : error.instancePath || '/' ,
message : error.message || 'Validation error' ,
keyword : error.keyword
}))
};
}
return { valid : true };
}
}
export const schemas = {
database : {
type : 'object' ,
properties : {
host : { type : 'string' , format : 'hostname' },
port : { type : 'integer' , format : 'port' },
database : { type : 'string' , minLength : 1 },
user : { type : 'string' , minLength : 1 },
password : { type : 'string' , minLength : 8 },
ssl : {
type : 'object' ,
properties : {
enabled : { type : 'boolean' }
},
required : ['enabled' ]
}
},
required : ['host' , 'port' , 'database' , 'user' , 'password' ]
}
};
3. Environment-Specific Validation from typing import Dict , List , Any
class EnvironmentValidator :
def __init__ (self ):
self .environments = ['development' , 'staging' , 'production' ]
self .environment_rules = {
'development' : {
'allow_debug' : True ,
'require_https' : False ,
'min_password_length' : 8
},
'production' : {
'allow_debug' : False ,
'require_https' : True ,
'min_password_length' : 16 ,
'require_encryption' : True
}
}
def validate_config (self, config: Dict , environment: str ) -> List [Dict ]:
if environment not in self .environment_rules:
raise ValueError(f"Unknown environment: {environment} " )
rules = self .environment_rules[environment]
violations = []
if not rules['allow_debug' ] and config.get('debug' , False ):
violations.append({
'rule' : 'no_debug_in_production' ,
'message' : 'Debug mode not allowed in production' ,
'severity' : 'critical'
})
if rules['require_https' ]:
urls = self ._extract_urls(config)
for url_path, url in urls:
if url.startswith('http://' ) and 'localhost' not in url:
violations.append({
'rule' : 'require_https' ,
'message' : f'HTTPS required for {url_path} ' ,
'severity' : 'high'
})
return violations
4. Configuration Testing import { describe, it, expect } from '@jest/globals' ;
import { ConfigValidator } from './config-validator' ;
describe ('Configuration Validation' , () => {
let validator : ConfigValidator ;
beforeEach (() => {
validator = new ConfigValidator ();
});
it ('should validate database config' , () => {
const config = {
host : 'localhost' ,
port : 5432 ,
database : 'myapp' ,
user : 'dbuser' ,
password : 'securepass123'
};
const result = validator.validate (config, 'database' );
expect (result.valid ).toBe (true );
});
it ('should reject invalid port' , () => {
const config = {
host : 'localhost' ,
port : 70000 ,
database : 'myapp' ,
user : 'dbuser' ,
password : 'securepass123'
};
const result = validator.validate (config, 'database' );
expect (result.valid ).toBe (false );
});
});
5. Runtime Validation import { EventEmitter } from 'events' ;
import * as chokidar from 'chokidar' ;
export class RuntimeConfigValidator extends EventEmitter {
private validator : ConfigValidator ;
private currentConfig : any ;
async initialize (configPath : string ): Promise <void > {
this .currentConfig = await this .loadAndValidate (configPath);
this .watchConfig (configPath);
}
private async loadAndValidate (configPath : string ): Promise <any > {
const config = await this .loadConfig (configPath);
const validationResult = this .validator .validate (
config,
this .detectEnvironment ()
);
if (!validationResult.valid ) {
this .emit ('validation:error' , {
path : configPath,
errors : validationResult.errors
});
if (!this .isDevelopment ()) {
throw new Error ('Configuration validation failed' );
}
}
return config;
}
private watchConfig (configPath : string ): void {
const watcher = chokidar.watch (configPath, {
persistent : true ,
ignoreInitial : true
});
watcher.on ('change' , async () => {
try {
const newConfig = await this .loadAndValidate (configPath);
if (JSON .stringify (newConfig) !== JSON .stringify (this .currentConfig )) {
this .emit ('config:changed' , {
oldConfig : this .currentConfig ,
newConfig
});
this .currentConfig = newConfig;
}
} catch (error) {
this .emit ('config:error' , { error });
}
});
}
}
6. Configuration Migration from typing import Dict
from abc import ABC, abstractmethod
import semver
class ConfigMigration (ABC ):
@property
@abstractmethod
def version (self ) -> str :
pass
@abstractmethod
def up (self, config: Dict ) -> Dict :
pass
@abstractmethod
def down (self, config: Dict ) -> Dict :
pass
class ConfigMigrator :
def __init__ (self ):
self .migrations: List [ConfigMigration] = []
def migrate (self, config: Dict , target_version: str ) -> Dict :
current_version = config.get('_version' , '0.0.0' )
if semver.compare(current_version, target_version) == 0 :
return config
result = config.copy()
for migration in self .migrations:
if (semver.compare(migration.version, current_version) > 0 and
semver.compare(migration.version, target_version) <= 0 ):
result = migration.up(result)
result['_version' ] = migration.version
return result
7. Secure Configuration import * as crypto from 'crypto' ;
interface EncryptedValue {
encrypted : true ;
value : string ;
algorithm : string ;
iv : string ;
authTag ?: string ;
}
export class SecureConfigManager {
private encryptionKey : Buffer ;
constructor (masterKey : string ) {
this .encryptionKey = crypto.pbkdf2Sync (masterKey, 'config-salt' , 100000 , 32 , 'sha256' );
}
encrypt (value : any ): EncryptedValue {
const algorithm = 'aes-256-gcm' ;
const iv = crypto.randomBytes (16 );
const cipher = crypto.createCipheriv (algorithm, this .encryptionKey , iv);
let encrypted = cipher.update (JSON .stringify (value), 'utf8' , 'hex' );
encrypted += cipher.final ('hex' );
return {
encrypted : true ,
value : encrypted,
algorithm,
iv : iv.toString ('hex' ),
authTag : cipher.getAuthTag ().toString ('hex' )
};
}
decrypt (encryptedValue : EncryptedValue ): any {
const decipher = crypto.createDecipheriv (
encryptedValue.algorithm ,
this .encryptionKey ,
Buffer .from (encryptedValue.iv , 'hex' )
);
if (encryptedValue.authTag ) {
decipher.setAuthTag (Buffer .from (encryptedValue.authTag , 'hex' ));
}
let decrypted = decipher.update (encryptedValue.value , 'hex' , 'utf8' );
decrypted += decipher.final ('utf8' );
return JSON .parse (decrypted);
}
async processConfig (config : any ): Promise <any > {
const processed = {};
for (const [key, value] of Object .entries (config)) {
if (this .isEncryptedValue (value)) {
processed[key] = this .decrypt (value as EncryptedValue );
} else if (typeof value === 'object' && value !== null ) {
processed[key] = await this .processConfig (value);
} else {
processed[key] = value;
}
}
return processed;
}
}
8. Documentation Generation from typing import Dict , List
import yaml
class ConfigDocGenerator :
def generate_docs (self, schema: Dict , examples: Dict ) -> str :
docs = ["# Configuration Reference\n" ]
docs.append("## Configuration Options\n" )
sections = self ._generate_sections(schema.get('properties' , {}), examples)
docs.extend(sections)
return '\n' .join(docs)
def _generate_sections (self, properties: Dict , examples: Dict , level: int = 3 ) -> List [str ]:
sections = []
for prop_name, prop_schema in properties.items():
sections.append(f"{'#' * level} {prop_name} \n" )
if 'description' in prop_schema:
sections.append(f"{prop_schema['description' ]} \n" )
sections.append(f"**Type:** `{prop_schema.get('type' , 'any' )} `\n" )
if 'default' in prop_schema:
sections.append(f"**Default:** `{prop_schema['default' ]} `\n" )
if prop_name in examples:
sections.append("**Example:**\n```yaml" )
sections.append(yaml.dump({prop_name: examples[prop_name]}))
sections.append("```\n" )
return sections
Output Format
Configuration Analysis : Current configuration assessment
Validation Schemas : JSON Schema definitions
Environment Rules : Environment-specific validation
Test Suite : Configuration tests
Migration Scripts : Version migrations
Security Report : Issues and recommendations
Documentation : Auto-generated reference
Focus on preventing configuration errors, ensuring consistency, and maintaining security best practices.
Connections
Domain: [[Software Entwicklung]]
Kategorie: [[Testing & Qualitaet]]
Navigation: [[Skills Uebersicht]], [[Home]]