Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update serializer to remove unused async fields #12517

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions 1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import os
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is here just in case something happens and someone else needs to run this script. Remove this script before checking in.


def modify_yaml_files():
products_dir = 'mmv1/products'

# Fields to remove under each section
remove_fields = {
'operation': {'path', 'wait_ms', 'kind'},
'result': {'path'},
'status': {'path', 'allowed', 'complete'},
'error': {'path', 'message'}
}

for product in os.listdir(products_dir):
product_path = os.path.join(products_dir, product)
if os.path.isdir(product_path):
for root, _, files in os.walk(product_path):
for file in files:
if file.endswith('.yaml'):
file_path = os.path.join(root, file)
print(f"\nProcessing: {file_path}")

with open(file_path, 'r') as f:
lines = f.readlines()

# Track state and indentation
in_async = False
current_section = None
async_indent = 0
section_indent = 0
lines_to_keep = []

# Buffer for current section
current_section_lines = []
current_section_has_content = False

for i, line in enumerate(lines, 1):
indent = len(line) - len(line.lstrip())
stripped = line.strip()

# Check for async section
if stripped.startswith('async:'):
in_async = True
async_indent = indent
lines_to_keep.append(line)
continue

# Check for sections under async
if in_async and any(stripped.startswith(f"{section}:") for section in remove_fields):
# Process previous section if exists
if current_section and current_section_has_content:
lines_to_keep.extend(current_section_lines)

current_section = next(section for section in remove_fields if stripped.startswith(f"{section}:"))
section_indent = indent
current_section_lines = [line]
current_section_has_content = False
continue

# Process lines within a section
if current_section and indent > section_indent:
# Check if this is a field we want to remove
field = stripped.split(':')[0] if ':' in stripped else None
if field and field in remove_fields[current_section]:
continue

# If it's not a field to remove, keep track of content
if stripped and not stripped.startswith('#'):
current_section_has_content = True
current_section_lines.append(line)
else:
# Leaving a section
if current_section:
if current_section_has_content:
lines_to_keep.extend(current_section_lines)
current_section = None
current_section_lines = []
current_section_has_content = False

# Check if we're leaving async section
if in_async and indent <= async_indent and stripped:
in_async = False

lines_to_keep.append(line)

# Handle last section if exists
if current_section and current_section_has_content:
lines_to_keep.extend(current_section_lines)

# Write back only if we made changes
if lines_to_keep != lines:
print(f"Writing changes to {file_path}")
with open(file_path, 'w') as f:
f.writelines(lines_to_keep)
else:
print(f"No changes needed in {file_path}")

if __name__ == "__main__":
modify_yaml_files()
30 changes: 0 additions & 30 deletions mmv1/api/async.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import (
"log"
"strings"

"github.com/GoogleCloudPlatform/magic-modules/mmv1/google"
"golang.org/x/exp/slices"
)

Expand Down Expand Up @@ -71,10 +70,6 @@ func NewAsync() *Async {
type OpAsync struct {
Result OpAsyncResult

Status OpAsyncStatus `yaml:"status,omitempty"`

Error OpAsyncError

// If true, include project as an argument to OperationWaitTime.
// It is intended for resources that calculate project/region from a selflink field
IncludeProject bool `yaml:"include_project"`
Expand All @@ -83,40 +78,15 @@ type OpAsync struct {
type OpAsyncOperation struct {
Kind string `yaml:"kind,omitempty"`

Path string `yaml:"path,omitempty"`

BaseUrl string `yaml:"base_url,omitempty"`

WaitMs int `yaml:"wait_ms,omitempty"`

// Use this if the resource includes the full operation url.
FullUrl string `yaml:"full_url,omitempty"`
}

// Represents the results of an Operation request
type OpAsyncResult struct {
ResourceInsideResponse bool `yaml:"resource_inside_response,omitempty"`

Path string `yaml:"path,omitempty"`
}

// Provides information to parse the result response to check operation
// status
type OpAsyncStatus struct {
Path string `yaml:"path,omitempty"`

Complete bool `yaml:"complete,omitempty"`

Allowed []bool `yaml:"allowed,omitempty"`
}

// Provides information on how to retrieve errors of the executed operations
type OpAsyncError struct {
google.YamlValidator `yaml:"-"`

Path string `yaml:"path,omitempty"`

Message string `yaml:"message,omitempty"`
}

// Async implementation for polling in Terraform
Expand Down
Loading