Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

susemanager-api

Scripts using the SUSE Manager API

These scripts all use the SUSE Manager API to do common tasks and extract information from any SUSE Manager instance.

I get asked about how to use the API quite frequently, so I decided to make a few working examples (based on scripts I wrote waaaay back in 2014 -- I'm getting old!) and share them with the world.

General usage instructions

The older scripts with the URL to the SUMA server hardcoded in the first lines were moved to the "classic" folder. Please change that before using.

All scripts now have standardized parameters for specifying the server name (-s), user (-u), password (-p) and URL (--url). If you just specify the server name, it'll assume the default URL always (https:///api/rpc).

By default the CA verification will be disabled, but you can force it with "--verify".

All scripts have a -h/--help parameter.

Most of the actions will require a regular SUMA user that's at least capable of reading information (Read-only user). The runscripts_sm script requires an admin user, as it is indeed creating/scheduling jobs.

These scripts are meant to make it easy to customize SUSE Multi-Linux Manager/Uyuni to your environment, and mainly so you can learn how to do it.

The complete SUSE Multi-Linux Manager API reference is available at: https://documentation.suse.com/suma/5.1/api/suse-manager/index.html

Currently available scripts

  • add_to_group.py: adds a system to System Group
  • apply_state.py: apply a named salt state to a system
  • create_activationkey.py: create a new activation key
  • create_group.py: create a new group
  • create_user.py: create a new user
  • check_activationkey.py: this will search for a named activation key and report if it exists or not.
  • delete_system.py: delete a system profile
  • delete_user.py: delete a user
  • get_all_eventhistory.py: retrieves the entire event history for ALL systems. Requires a system ID.
  • get_eventdetails.py: retrieves detailed information about one specific event in a system's history. Needs the system ID and the event ID.
  • get_eventhistory.py: retrieves a list of all events for one system over the last 30 days. Requires a system ID.
  • getresults_sm.py: this script will take a "jobs.csv" generated by runscripts_sm.py, query for all the results (including command output), and write them to a CSV.
  • list_activationkeys.py: returns a list of all activation keys present on the system
  • list_activesystems.py: returns a list of all ACTIVE systems (that have recently checked in with SUMA)
  • list_groups.py: returns a list of all defined system groups
  • list_systems.py: returns a list of all registered systems, including inactive ones
  • list_channels.py: returns a list of all defined software channels, including child ones
  • list_custominfo.py: returns all custominfo key/value pairs defined for a system. Requires a system ID.
  • list_cvestatus.py: asks SUMA to return the patch status for a named CVE on all registered systems. Statuses can be PATCHED, AFFECTED_PATCH_APPLICABLE or NOT_AFFECTED.
  • list_locked.py: returns a list of systems marked as "locked"
  • list_needsreboot.py: returns a list of systems that currently need rebooting.
  • list_config_channels.py: lists all configuration channels
  • list_inactive_systems.py: lists systems that have been inactive for X days.
  • list_orgs.py: lists all defined organizations
  • list_users.py: lists all defined users
  • lookup_systemid.py: looks up a hostname and returns the corresponding registered System ID.
  • migrate_system.py: does a complete system migration from one service pack to the other (interactive)
  • packagesinstalled90days.py: returns a list of all package actions that happened over the last 90 days, with status.
  • rebootsystem.py: schedules a reboot for a system.
  • runscript_sm.py: takes a list of hosts and a bash script, and schedules actions for every one of them. Use getresults_sm.py to fetch the results.
  • updateallpackages.py: installs all pending updates for a system
  • update_custominfo.py: sets a custominfo key/value pair for a specific system.

The migrate_system.py was inspired by the pull request at uyuni-project/uyuni-docs#3033, but I made it more interactive, with no hardcoded values.

  • schedule_highstate.py: schedules a hightstate event for a system
  • search_packages.py: search for packages in a specific channel
  • search_patches.py: search for patches in the database
  • system_details.py: fetch details for a specific system

curl scripts

By demand, I'm posting the curl-equivalent scripts. Note that you need the header.txt file present in the same directory, as they're reading from this file. I'm using the curl "cookie jar" feature to store/read the cookies/session ID tokens. You'll see a "cookies.txt" file being created after running any of these. The authentication token is removed at the end after the logout operation is performed on each script.

  • curl_getSystemCurrencyScores.sh: does the same as list_allsystems.py script, which is to list all available systems, but with the corresponding patches/bugfixes counts/scores.
  • curl_getId.sh: looks up a hostname and returns the corresponding System ID.
  • curl_listsystems.sh: returns basic data from all available systems (name, id, last checkin, etc)

About

Scripts using the SUSE Manager API

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages