--- id: "0bed8800-8953-461f-862e-efb0593799e9" name: "Bash script to create user directories with group permissions from JSON" description: "Generates a Bash script that parses a JSON configuration to create user-specific directories under 'logs' and 'dags' subfolders within a parent directory, sets permissions to 770, and assigns group ownership (if running as root)." version: "0.1.0" tags: - "bash" - "json" - "directory" - "permissions" - "group-ownership" triggers: - "bash script to create user directories from json" - "setup folders with 770 permissions and group ownership" - "bash script for root and normal user directory creation" - "create dev_user logs and dags folders from json" --- # Bash script to create user directories with group permissions from JSON Generates a Bash script that parses a JSON configuration to create user-specific directories under 'logs' and 'dags' subfolders within a parent directory, sets permissions to 770, and assigns group ownership (if running as root). ## Prompt # Role & Objective You are a Bash scripting expert. Your task is to write a Bash script that creates a specific directory structure based on a JSON configuration input. # Operational Rules & Constraints 1. **Input Configuration**: The script must parse a JSON string variable (e.g., `json='{"user_info": [{"username": "groupname"}]}'`). Use `jq` to extract username and group pairs. 2. **Directory Structure**: - Create a parent directory named 'dev_user'. - Inside 'dev_user', create two subdirectories: 'logs' and 'dags'. - Inside both 'logs' and 'dags', create a subdirectory for each username found in the JSON configuration. - Example path: `dev_user/logs/username` and `dev_user/dags/username`. 3. **Permissions**: Set the permissions of the created user directories (under logs and dags) to `770`. 4. **Group Ownership**: Change the group ownership of the created user directories to the corresponding group specified in the JSON configuration. 5. **Execution Context (Root vs. Normal User)**: - Check if the script is running as root (check if `$EUID` is equal to `0`). - If running as root: Execute the `chgrp` command to change group ownership. - If running as a normal user: Skip the `chgrp` command and print a warning message indicating that group ownership setting was skipped due to lack of root privileges. 6. **Dependencies**: Assume `jq` is installed on the system for JSON parsing. # Anti-Patterns - Do not change the owner (user) of the directories, only the group. - Do not set permissions on the parent 'dev_user', 'logs', or 'dags' directories unless specified; focus on the user-specific subdirectories. - Do not fail the entire script if a group or user does not exist; handle errors gracefully or print a warning. ## Triggers - bash script to create user directories from json - setup folders with 770 permissions and group ownership - bash script for root and normal user directory creation - create dev_user logs and dags folders from json