Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl
, '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

Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl
, '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

Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl
, '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

Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl
, '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

Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl
, '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

Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl
, '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

Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl
, '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

Move container-related functions from PodManager to a separate file - #56700

Merged
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook
Oct 21, 2025
Merged

Move container-related functions from PodManager to a separate file#56700
jscheffl merged 3 commits into
apache:mainfrom
boschglobal:feature/prepare-asyncpodmanager-uses-hook

Conversation

@AutomationDev85

Copy link
Copy Markdown
Contributor

Overview

We are preparing an update to the KubernetesPodTriggerer workflow to align its startup behavior with that of the synchronous workflow. As part of this effort, we are introducing this preparation PR.

This PR moves certain container-related functions from PodManager to a new container.py module. This refactoring helps resolve circular import issues, as both the Hook and PodManager can now import these shared functions from container.py. In upcoming PRs, we plan to unify the code paths so that both the Triggerer (async) and synchronous workflows use the same logic to start pods. This change also lays the groundwork for introducing an AsyncPodManager that will utilize functions from the AsyncKubernetesHook.

We welcome your feedback on this change

Details of change:

  • Move container-related functions from PodManager to container.py
  • Update PodManager and Hook to import these functions from the container.py
  • Move the PodOperatorHookProtocol class to the hook module.

@AutomationDev85
AutomationDev85force-pushed the feature/prepare-asyncpodmanager-uses-hook branch from 65b55e1 to 3729539CompareOctober 16, 2025 09:18
@jscheffl
jscheffl self-requested a review October 17, 2025 18:01

@jscheffljscheffl left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the refactoring. Looking good to me. Just one nit as comment.

I leave this PR open for some days and hope another pair of eyes makes another pass before merge. But I assume this is a non critical change.

@jscheffljscheffl changed the title [Providers][CNCF-Kubernetes] Move container-related functions from PodManager to a separate fileMove container-related functions from PodManager to a separate fileOct 17, 2025
@jscheffl
jscheffl merged commit 389a34b into apache:mainOct 21, 2025
91 checks passed
Jonpaco23 pushed a commit to Jonpaco23/airflow that referenced this pull request Oct 21, 2025
…pache#56700)
* Move container-related functions from PodManager to a separate file
* Moved unit tests
* Optimize redundant container status checks
---------
Co-authored-by: AutomationDev85 <AutomationDev85>
terminal_states = {FAILED, SUCCEEDED}


class PodOperatorHookProtocol(Protocol):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

is this considered part of the public API?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does not look breaking to me.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question is if it's part of our public API or not.
I don't know if this can be used in some user custom code (operator, executor)?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think this question is not the one that should be asked - hence I answered the righ one. I don't think we ever specified what is and what is not public API.

But generally it's pretty much the same - Breaking = Public API change in a breaking way. I have not found it to be used elsewhere in our code except cncf.kubernetes - so I assume the intention was to not be used outside of it -> hence not breaking -> hence no public API.

BTW, Semver is not about whether something is a public API or not (because often it is not clearly specified) - but about whether intention of it was to be used as such.

So actually the proper question (if we want to be picky and ask really good question) to ask is "was that intended to be used outside of the provider and changes it in a breaking way?" , And my answer is "I don't think so".

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sorry was distracted all day.

Technically it was not decleared private but I agree to Jarek that we did not define the "public API" on providers. Had the same question if this is breaking as well and did not find any other reference in "our" codebose.
The Protocol is not documented elsewhere and is not needed if you implement operators/Dags or so. So a "normal user" should not see this being removed. I assume every "Advanced user" that potentially builds around the package and extends the operators and needs this would know how to adjust but would be a very nice use case/extension. As GKE was also not using it I think it is safe to remove.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providersprovider:cncf-kubernetesKubernetes (k8s) provider related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@AutomationDev85@potiuk@eladkal@jscheffl