> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/random-topics/yaml.md).

# YAML

### YAML কী?

**YAML** (YAML Ain’t Markup Language) হলো একটি **human-readable data serialization language**, যা configuration files এবং data exchange এর জন্য ব্যবহৃত হয়। এটি JSON বা XML এর বিকল্প হিসেবে জনপ্রিয়।

***

### YAML এর বৈশিষ্ট্য (Features)

* **Readable** → মানুষ সহজে পড়তে ও বুঝতে পারে।
* **Indentation-based** → structure বোঝাতে space ব্যবহার করা হয়।
* **Lightweight** → syntax কমপ্লেক্স নয়, JSON/XML এর তুলনায় সংক্ষিপ্ত।
* **Cross-language Support** → Python, PHP, Java, Go, Ruby সহ অনেক ভাষায় ব্যবহারযোগ্য।
* **Data Serialization** → structured data serialize করে রাখা যায়।
* **Comments Supported** → YAML এ comments লেখা যায়।

***

### YAML এর Syntax Rules

1. **Indentation** → YAML এ শুধুমাত্র **space** ব্যবহার হয়, **tab allowed নয়**।
2. **Key-Value Pair** → key এবং value এর মাঝে `:` ব্যবহার হয়।
3. **Case Sensitive** → key এবং value দুটোই case-sensitive।
4. **Comments** → `#` দিয়ে comment লেখা হয়।
5. **Strings** → quote ছাড়া, single quote বা double quote – তিনভাবেই লেখা যায়।

***

### YAML Data Types

#### Scalars (Single value)

```yaml
string: "Hello YAML"
integer: 42
float: 3.14
boolean_true: true
boolean_false: false
null_value: null
```

***

#### Lists (Array)

```yaml
fruits:
  - Mango
  - Banana
  - Apple
```

Alternative inline list:

```yaml
fruits: [Mango, Banana, Apple]
```

***

#### Dictionaries (Map / Object)

```yaml
person:
  name: Mominur
  age: 31
  skills:
    - Python
    - Django
    - Docker
```

***

### Comments in YAML

```yaml
# এটি একটি comment
app:
  name: MyApp   # inline comment
```

***

### Advanced Features in YAML

#### Anchors (&) এবং Aliases (\*)

একই data বারবার ব্যবহার করতে না হলে **anchors** ব্যবহার করা হয়।

```yaml
default: &default
  name: DefaultUser
  role: User

admin:
  <<: *default
  role: Admin
```

এখানে `&default` হলো anchor, আর `*default` হলো alias।\
এর মানে, `admin` key তে `default` এর সব value copy হয়ে যাবে, শুধু `role` override হয়েছে।

***

#### Merge Keys (<<)

YAML এ `<<` ব্যবহার করে map merge করা যায়।

```yaml
defaults: &defaults
  db: postgres
  cache: redis

dev:
  <<: *defaults
  debug: true
```

এখানে `dev` key `defaults` inherit করেছে।

***

#### Multiline Strings

যদি বড় লেখা লিখতে হয়, YAML এ **literal block** (`|`) বা **folded block** (`>`) ব্যবহার করা হয়।

**Literal Block (`|`) → লাইন ব্রেক বজায় রাখে**

```yaml
description: |
  এটি একটি multiline text.
  এখানে লাইন ব্রেক সংরক্ষিত থাকবে।
```

**Folded Block (`>`) → লাইন ব্রেক স্পেসে রূপান্তর করে**

```yaml
message: >
  এটি একটি folded
  multiline text.
```

Output হবে: `"এটি একটি folded multiline text."`

***

#### Data Types Explicit Declaration

```yaml
age: !!int "25"
price: !!float "45.67"
active: !!bool "true"
```

***

#### Multiple Documents in One YAML File

একটি YAML ফাইলে একাধিক document রাখা যায় `---` দিয়ে আলাদা করে।

```yaml
---
app: WebApp
version: 1.0
---
app: MobileApp
version: 2.0
```

***

#### &#x20;Complex Keys

Map এর key হিসেবে list বা object ব্যবহার করা যায়।

```yaml
? [name, age]
: [Mominur, 31]
```

***

### YAML এর ব্যবহার ক্ষেত্র (Use Cases)

1. **Configuration Files**
   * Docker Compose (`docker-compose.yaml`)
   * Kubernetes (`deployment.yaml`)
   * GitHub Actions workflow
   * CI/CD pipelines
2. **DevOps Tools**
   * Ansible playbooks
   * Terraform
   * Helm Charts
3. **Application Settings**
   * Django, Symfony, Rails ইত্যাদির config files
4. **Data Exchange**
   * API configuration
   * Microservices communication

***

### Real-Life Example

#### Docker Compose Example

```yaml
version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: postgres:13
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
```

#### Kubernetes Deployment Example

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myapp:latest
          ports:
            - containerPort: 8080
```

***

YAML হলো একটি powerful, readable এবং widely-used data serialization format। **basic features** যেমন key-value, list, dictionary থেকে শুরু করে **advanced features** যেমন anchors, aliases, merge keys, এবং multiple documents – সবই YAML কে versatile করেছে।

এই কারণেই YAML DevOps, Cloud Infrastructure, এবং Modern Application configuration এ সবচেয়ে বেশি ব্যবহৃত হচ্ছে।
