Bug 2179084

Summary: `pcs resource create` fails with a traceback if empty interval is specified for an operation
Product: Red Hat Enterprise Linux 9 Reporter: Tomas Jelinek <tojeline>
Component: pcsAssignee: Tomas Jelinek <tojeline>
Status: NEW --- QA Contact: cluster-qe <cluster-qe>
Severity: low Docs Contact:
Priority: medium    
Version: 9.2CC: cluster-maint, idevat, mlisik, mpospisi, omular, tojeline
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Tomas Jelinek 2023-03-16 15:39:30 UTC
Description of problem:
`pcs resource create` fails with a traceback if empty interval is specified for an operation


Version-Release number of selected component (if applicable):
pcs-0.11.4-6


How reproducible:
always, easily


Steps to Reproduce:
1. pcs resource create test ocf:pacemaker:Dummy op monitor interval=


Actual results:
Traceback (most recent call last):
  File "/usr/sbin/pcs", line 33, in <module>
    sys.exit(load_entry_point('pcs==0.11.4', 'console_scripts', 'pcs')())
  File "/usr/lib/python3.9/site-packages/pcs/app.py", line 273, in main
    routing.create_router(cmd_map, [])(
  File "/usr/lib/python3.9/site-packages/pcs/cli/common/routing.py", line 33, in _router
    return cmd_map[sub_cmd](lib, argv_next, modifiers)
  File "/usr/lib/python3.9/site-packages/pcs/cli/common/routing.py", line 33, in _router
    return cmd_map[sub_cmd](lib, argv_next, modifiers)
  File "/usr/lib/python3.9/site-packages/pcs/resource.py", line 745, in resource_create
    lib.resource.create(
  File "/usr/lib/python3.9/site-packages/pcs/cli/common/lib_wrapper.py", line 95, in decorated_run
    return run_with_middleware(run, cli_env, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/pcs/cli/common/middleware.py", line 14, in run
    return next_in_line(env, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/pcs/cli/common/middleware.py", line 42, in apply
    result_of_next = next_in_line(env, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/pcs/cli/common/middleware.py", line 80, in apply
    result_of_next = next_in_line(env, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/pcs/cli/common/lib_wrapper.py", line 86, in run
    lib_call_result = run_library_command(lib_env, *args, **kwargs)
  File "/usr/lib/python3.9/site-packages/pcs/lib/commands/resource.py", line 433, in create
    primitive_element = resource.primitive.create(
  File "/usr/lib/python3.9/site-packages/pcs/lib/cib/resource/primitive.py", line 232, in create
    return append_new(
  File "/usr/lib/python3.9/site-packages/pcs/lib/cib/resource/primitive.py", line 290, in append_new
    create_operations(
  File "/usr/lib/python3.9/site-packages/pcs/lib/cib/resource/operations.py", line 398, in create_operations
    append_new_operation(operations_element, id_provider, operation)
  File "/usr/lib/python3.9/site-packages/pcs/lib/cib/resource/operations.py", line 428, in append_new_operation
    options["interval"],
KeyError: 'interval'


Expected results:
No traceback, print a nice error message.


Additional info:
It works with an empty timeout:
# pcs resource create test ocf:pacemaker:Dummy op monitor timeout=
# pcs resource config test
Resource: test (class=ocf provider=pacemaker type=Dummy)
  Operations:
    migrate_from: test-migrate_from-interval-0s
      interval=0s
      timeout=20s
    migrate_to: test-migrate_to-interval-0s
      interval=0s
      timeout=20s
    monitor: test-monitor-interval-60s
      interval=60s
    reload: test-reload-interval-0s
      interval=0s
      timeout=20s
    reload-agent: test-reload-agent-interval-0s
      interval=0s
      timeout=20s
    start: test-start-interval-0s
      interval=0s
      timeout=20s
    stop: test-stop-interval-0s
      interval=0s
      timeout=20s