Skip to content

Commit 0874b92

Browse files
author
Patrick J. McNerthney
committed
Make the --pip-install and --packages dependencies optional
1 parent b520959 commit 0874b92

File tree

6 files changed

+28
-24
lines changed

6 files changed

+28
-24
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ COPY dist/*.whl /root
44
WORKDIR /
55
RUN \
66
set -eux && \
7-
pip install --root-user-action ignore --no-build-isolation /root/*.whl && \
7+
pip install --root-user-action ignore --no-build-isolation $(echo /root/*.whl)[pip,packages] && \
88
rm -rf /root/*.whl /root/.cache && \
99
groupadd --gid 2000 pythonic && \
1010
useradd --uid 2000 --gid pythonic --home-dir /opt/pythonic --create-home --shell /usr/sbin/nologin pythonic
1111

1212
USER pythonic:pythonic
1313
WORKDIR /opt/pythonic
1414
EXPOSE 9443
15-
ENTRYPOINT ["python", "-m", "crossplane.pythonic.main"]
15+
ENTRYPOINT ["function-pythonic"]

crossplane/pythonic/composite.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -637,15 +637,6 @@ def fatal(self, fatal):
637637
else:
638638
self._result.severity = fnv1.Severity.SEVERITY_NORMAL
639639

640-
@property
641-
def message(self):
642-
return self._result.message if bool(self) else None
643-
644-
@message.setter
645-
def message(self, message):
646-
if bool(self):
647-
self._result.message = message
648-
649640
@property
650641
def reason(self):
651642
return self._result.reason if bool(self) else None
@@ -655,6 +646,15 @@ def reason(self, reason):
655646
if bool(self):
656647
self._result.reason = reason
657648

649+
@property
650+
def message(self):
651+
return self._result.message if bool(self) else None
652+
653+
@message.setter
654+
def message(self, message):
655+
if bool(self):
656+
self._result.message = message
657+
658658
@property
659659
def claim(self):
660660
return bool(self) and self._result == fnv1.Target.TARGET_COMPOSITE_AND_CLAIM

crossplane/pythonic/main.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import crossplane.function.logging
1414
import crossplane.function.proto.v1.run_function_pb2_grpc as grpcv1
1515
import grpc
16-
import pip._internal.cli.main
1716

1817
from . import function
1918

@@ -24,7 +23,7 @@ def main():
2423

2524
class Main:
2625
async def main(self):
27-
parser = argparse.ArgumentParser('Forta Crossplane Function')
26+
parser = argparse.ArgumentParser('Crossplane Function Pythonic')
2827
parser.add_argument(
2928
'--debug', '-d',
3029
action='store_true',
@@ -40,18 +39,18 @@ async def main(self):
4039
parser.add_argument(
4140
'--address',
4241
default='0.0.0.0:9443',
43-
help='Address at which to listen for gRPC connections, default: 0.0.0.0:9443',
42+
help='Address to listen on for gRPC connections, default: 0.0.0.0:9443',
4443
)
4544
parser.add_argument(
4645
'--tls-certs-dir',
4746
default=os.getenv('TLS_SERVER_CERTS_DIR'),
4847
metavar='DIRECTORY',
49-
help='Serve using mTLS certificates.',
48+
help='Serve using TLS certificates.',
5049
)
5150
parser.add_argument(
5251
'--insecure',
5352
action='store_true',
54-
help='Run without mTLS credentials. If you supply this flag --tls-certs-dir will be ignored.',
53+
help='Run without mTLS credentials, --tls-certs-dir will be ignored.',
5554
)
5655
parser.add_argument(
5756
'--packages',
@@ -97,7 +96,8 @@ async def main(self):
9796
self.configure_logging(args)
9897

9998
if args.pip_install:
100-
pip._internal.cli.main.main(['install', *shlex.split(args.pip_install)])
99+
import pip._internal.cli.main
100+
pip._internal.cli.main.main(['install', '--user', *shlex.split(args.pip_install)])
101101

102102
# enables read only volumes or mismatched uid volumes
103103
sys.dont_write_bytecode = True
@@ -128,7 +128,8 @@ async def main(self):
128128
)
129129
else:
130130
if not args.insecure:
131-
raise ValueError('Either --tls-certs-dir or --insecure must be specified')
131+
print('Either --tls-certs-dir or --insecure must be specified', file=sys.stderr)
132+
sys.exit(1)
132133
grpc_server.add_insecure_port(args.address)
133134
await grpc_server.start()
134135

crossplane/pythonic/packages.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
PACKAGES_DIR = None
1515

1616

17-
def operator(grpc_server, grpc_runner, packages_secrets, packages_namespace, packages_dir):
17+
def operator(grpc_server, grpc_runner, packages_secrets, packages_namespaces, packages_dir):
1818
logging.getLogger('kopf.objects').setLevel(logging.INFO)
1919
global GRPC_SERVER, GRPC_RUNNER, PACKAGES_DIR
2020
GRPC_SERVER = grpc_server
@@ -28,8 +28,8 @@ def operator(grpc_server, grpc_runner, packages_secrets, packages_namespace, pac
2828
kopf.on.delete('', 'v1', 'secrets', labels=PACKAGE_LABEL)(delete)
2929
return kopf.operator(
3030
standalone=True,
31-
clusterwide=not packages_namespace,
32-
namespaces=packages_namespace,
31+
clusterwide=not packages_namespaces,
32+
namespaces=packages_namespaces,
3333
)
3434

3535

examples/helm-copy-secret/vcluster.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def compose(self):
1515
release.spec.forProvider.namespace = namespace
1616
release.spec.forProvider.values.controlPlane.proxy.extraSANs[0] = f'{name}.{namespace}'
1717
vcluster_secret = self.requireds.vcluster_secret('v1', 'Secret', namespace, secret_name)[0]
18-
argocd_secret = self.resources.argocd_secret('v1', 'Secret', 'default', secret_name)
18+
argocd_secret = self.resources.argocd_secret('v1', 'Secret', 'argocd', secret_name)
1919
argocd_secret.metadata.labels['argocd.argoproj.io/secret-type'] = 'cluster'
2020
argocd_secret.type = 'Opaque'
2121
argocd_secret.data.name = B64Encode(name)

pyproject.toml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ classifiers = [
1414
"Programming Language :: Python :: 3.13",
1515
]
1616

17+
dynamic = ["version"]
18+
1719
dependencies = [
1820
"crossplane-function-sdk-python==0.9.0",
19-
"kopf==1.38.0",
2021
"pyyaml==6.0.2",
2122
]
2223

23-
dynamic = ["version"]
24+
[project.optional-dependencies]
25+
pip = ["pip==25.2"]
26+
packages = ["kopf==1.38.0"]
2427

2528
[project.urls]
2629
Documentation = "https://github.com/fortra/function-pythonic#readme"

0 commit comments

Comments
 (0)