Writing custom tasks
To create custom NETCONF tasks that use the edgeops
library, you need to include the task helper and configure your task metadata properly.
-
Create a JSON metadata file for your task, for example,
tasks/my_task.json
:{ "description": "My custom NETCONF task", "input_method": "stdin", "files": [ "edgeops/files/task_helper.rb", "edgeops/lib/puppet_x/puppetlabs/netconf/client.rb", "edgeops/lib/puppet_x/puppetlabs/netconf/session.rb", "edgeops/lib/puppet_x/puppetlabs/netconf/redactor.rb" ], "remote": false, "parameters": { "interface": { "description": "Interface to configure", "type": "String" }, "source_datastore": { "description": "Source datastore override", "type": "Optional[Enum[running, candidate, startup]]" } } }
The"files": ["edgeops/files/task_helper.rb"]
entry is required to bundle theedgeops
library with your task. -
Create your task implementation, for example,
tasks/my_task.rb
:#!/usr/bin/env ruby require_relative '../../edgeops/files/task_helper.rb' require 'puppet_x/puppetlabs/netconf/session' require 'json' result = PuppetX::Puppetlabs::Netconf::Session.with_session do |session| # Access parameters interface = session.task_params['interface'] # Get configuration config = session.get_config # Make changes new_config = "<config>...</config>" session.edit_config(new_config) # Commit if using candidate session.commit if session.supports_candidate? # Report results session.report_result({ 'status' => 'success', 'interface' => interface, 'message' => 'Configuration updated' }) end # Output result as JSON (required!) puts result.to_json
-
Always declare required files in task metadata
-
Capture the session result:
result = Session.with_session
-
Output JSON:
puts result.to_json
-
Use session helpers:
session.supports_candidate?
andsession.task_params
-
-
Add the task to an existing or new module in your control repo and deploy to an environment. See Writing tasks.
-
Add a node with the NETCONF transport to your inventory. See Add agentless nodes to the inventory.