Coder Social home page Coder Social logo

clusteradm's Introduction

clusteradm CLI & CLI Plugin

A CLI and kubernetes CLI plugin that allows you to interact with open-cluster-management to manage your Hybrid Cloud presence from the command-line.

Quick start

Install the clusteradm command-line:

From install script:

curl -L https://raw.githubusercontent.com/open-cluster-management-io/clusteradm/main/install.sh | bash

From go install:

GO111MODULE=off go get -u open-cluster-management.io/clusteradm/...

From binaries:

The binaries for several platforms are available here.

  • Download the compressed file from here
  • Uncompress the file and place the output in a directory of your $PATH

From source:

Go 1.17 is required in order to build or contribute on this project as it leverage the go:embed tip. The binary will be installed in $GOPATH/bin

git clone https://github.com/open-cluster-management-io/clusteradm.git
cd clusteradm
make build
clusteradm

Initialize a hub and join a cluster

# Initialize the hub
kubectl config use-context <hub cluster context> # kubectl config use-context kind-hub
clusteradm init

# Request a managed cluster to join the hub
kubectl config use-context <managed cluster context> # kubectl config use-context kind-managed-cluster
clusteradm join --hub-token <token> --hub-apiserver <api server url> --cluster-name <cluster name>

# Accept the managed cluster request on the hub
kubectl config use-context <hub cluster context> # kubectl config use-context kind-hub
clusteradm accept --clusters <list of clusters> # clusteradm accept --clusters c1,c2,...

After each above clusteradm command, the clusteradm will print out the next clusteradm command to execute which can be copy/paste.

Contributing

See our Contributing Document for more information.

Commands

The commands are composed of a verb and a noun and then a number of parameters. Logs can be gather by setting the klog flag -v. To get the logs in a separate file:

clusteradm <subcommand> -v 2 > <your_logfile>

or

clusteradm <subcommand> -v 99 --logtostderr=false --log-file=<your_log_file>

version

Display the clusteradm version and the kubeversion

clusteradm version

init

Initialize the hub by deploying the hub side resources to manage clusters.

clusteradm init [--use-bootstrap-token]

it returns the command line to launch on the spoke to join the hub.

NOTE: Do not run init command against a multicluster-controlplane instance. It is already an initialized hub on start. Instead, use clusteradm get token --use-bootstrap-token to get the join command.

get token

Get the latest token to import a new managed cluster.

clusteradm get token --context ${CTX_HUB_CLUSTER}

join

Install the agent on the spoke.

clusteradm join --hub-token <token> --hub-apiserver <hub_apiserver_url> --cluster-name c1 [--ca-file <path-to-ca-file>] [--force-internal-endpoint-lookup]

it returns the command line to launch on the hub the accept the spoke onboarding.

NOTE: The --ca-file flag is used to provide a valid CA for hub. The ca data is fetched from cluster-info configmap in kube-public namespace of the hub cluster, then from kube-root-ca.crt configmap in kube-public namespace if the cluster-info configmap does not exist.

NOTE: If you're trying to join a hub cluster which is initialized from a kind cluster, please set the --force-internal-endpoint-lookup flag.

accept

Accept the CSRs on the hub to approve the spoke clusters to join the hub.

clusteradm accept --clusters <cluster1>, <cluster2>,....

unjoin

Uninstall the agent on the spoke

clusteradm unjoin --cluster-name c1

Note: the applied resources on managed cluster would be checked and prompt a warning if still exist any.

clean

Clean up the multicluster hub control plane and other initialized resources on the hub cluster

clusteradm clean --context ${CTX_HUB_CLUSTER}

install hub-addon

Install specific built-in add-on(s) to the hub cluster.

clusteradm install hub-addon --names application-manager

clusteradm install hub-addon --names governance-policy-framework

enable addons

Enable specific add-on(s) agent deployment to the given managed clusters of the specified namespace

clusteradm addon enable --names application-manager --namespace <namespace> --clusters <cluster1>,<cluster2>,....

clusteradm addon enable --names governance-policy-framework --namespace <namespace> --clusters <cluster1>,<cluster2>,....

clusteradm addon enable --names config-policy-controller --namespace <namespace> --clusters <cluster1>,<cluster2>,....

create sample application

Create and Deploy a Sample Subscription Application

clusteradm create sampleapp sampleapp1

clusteradm's People

Contributors

dhaiducek avatar elgnay avatar gurnben avatar haoqing0110 avatar hchenxa avatar huiwq1990 avatar ilan-pinto avatar ilonashishov avatar itdove avatar jichenjc avatar kim-fitness avatar mgold1234 avatar mikeshng avatar mprahl avatar nirs avatar ohkinozomu avatar openshift-merge-robot avatar panguicai008 avatar qiujian16 avatar rokibulhasan7 avatar skeeey avatar tamalsaha avatar user0308 avatar xauthulei avatar xuezhaojun avatar yanmxa avatar ycyaoxdu avatar yue9944882 avatar zhiweiyin318 avatar zhujian7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

clusteradm's Issues

clusteradm join error

I try to use "clusteradm join" command to join a managed cluster into a hub cluster,but got this error
Error: "join/klusterlets.crd.yaml" (string): the server could not find the requested resource

managed cluster info:
kubernetes: v1.14
installed klusterlet

what is this token?

What is the token in the doc?

clusteradm join --hub-token <token> --hub-apiserver <api server url> --cluster-name <cluster name> 

Sorry, I did not have the context here. Please explain it. Thanks.

bug: delete work cannot finish executing

Ran clusteradm delete work addon-work-manager-deploy --cluster itdove2-4-10 and it never finished, maybe because the cluster is already removed.

 oc get managedcluster 
NAME           HUB ACCEPTED   MANAGED CLUSTER URLS                                                      JOINED   AVAILABLE   AGE
itdove-4-10    true           https://api.aws-4-10-rc4-sno-2x-vxxxxx:6443/   True     True        16d
itdove2-4-10   true           https://api.aws-4-10-rc4-sno-2x-xxxxxx:6443/   True     Unknown     13d

When the cluster is "available" it works.
reported by @itdove

command to utilize cluster-proxy

It would be useful if we can use cluster-proxy in clusteradm command

  1. I can check the healthiness of a certain managed cluster
  2. I can execute a kubectl command against a managedcluster

/kind feature

clusteradm join: no matches for kind "Klusterlet" in version "operator.open-cluster-management.io/v1"

Action:

clusteradm join --hub-token xxxx  --hub-apiserver https://127.0.0.1:55130 --cluster-name c1

Got:

no matches for kind "Klusterlet" in version "operator.open-cluster-management.io/v1"

Expect:

login back onto the hub and run: clusteradm accept --clusters c1

When the system is slow, the Klusterlet CRD is not yet ready to use and so the create of the klusterlet CR fails.

Workaround:
Run again the command clusteradm join

clusteradm reset

After initialize an open cluster management control plane, there is no command line to reset the whole initialization.
clusteradm reset

admission.work.open-cluster-management.io/v1: the server is currently unable to handle the request

E0809 13:49:31.249926 419192 memcache.go:196] couldn't get resource list for admission.cluster.open-cluster-management.io/v1: the server is currently unable to handle the request
E0809 13:49:31.250173 419192 memcache.go:196] couldn't get resource list for admission.work.open-cluster-management.io/v1: the server is currently unable to handle the request
E0809 13:49:31.252108 419192 memcache.go:101] couldn't get resource list for admission.cluster.open-cluster-management.io/v1: the server is currently unable to handle the request
E0809 13:49:31.255432 419192 memcache.go:101] couldn't get resource list for admission.work.open-cluster-management.io/v1: the server is currently unable to handle the request

No CSR to approve for managed cluster.

Hi,

While I am able to run join command from managed cluster, I get an error when I run clusteradm accept --clusters cluster1 --context kind-hub .

The error is no CSR to approve for cluster cluster1

However, upon checking kubectl get managedcluster --context kind-hub I can see the cluster as accepted but the availability tag is unknown and joined tag's value is blank.

Output messages are not right when clusteradm accept a cluster list

I am try to use the following cmd clusteradm accept --clusters <cluster1>, <cluster2>,.... to accept the single cluster to my hub:
e.g:

# clusteradm accept --clusters  llhu-1 ,llhu-2
CSR llhu-1-2gx7m already approved
hubAcceptsClient already set for managed cluster llhu-1

Also:

# clusteradm accept --clusters  llhu-2 ,llhu-1
CSR llhu-2-fbd2h already approved
hubAcceptsClient already set for managed cluster llhu-2

It should be :

# clusteradm accept --clusters  llhu-1 ,llhu-2
CSR llhu-1-2gx7m already approved
hubAcceptsClient already set for managed cluster llhu-1
CSR llhu-2-fbd2 already approved
hubAcceptsClient already set for managed cluster llhu-2

Please correct me if I am wrong, Thanks

[Umbrella Issue] CLI usability improvements

  • Comprehensive clusteradm get .. command:

  • Clusterset operatibility:

    • create: #123
    • add cluster/bind namespace: #126
    • remove cluster
    • unbind namespace
  • Version mgmt / Upgrading: #121

  • Proxy / tunneling: #88

    • proxy health: #90
    • proxy tunnel: (creating tunnels for kubectl-access to the managed clusters)
      • create
      • connect
      • delete
    • proxy stats: (collecting stats such as in-use bandwidth, connection counts, etc.)
    • proxy bench: (test the estimated maximum bandwidth & latency thru the tunnels)
  • Addon management:

    • enable/disable: #101
  • Miscs:

    • prompt warning if running join command against hub cluster
    • prompt warning if running "hub" oriented commands against managed cluster
    • unjoin cluster: (removing registered managed clusters from the hub neatly)
  • Manifest work:

    • create from static yaml files: #134
  • Testing: (covering all the new sub-commands above w/ e2e tests)

Add subcommand to enable application management addon

There should be a subcommand that enables addon. For example,

clusteradm addon enable application-manager --cluster cluster1
clusteradm addon enable application-manager --all

which will perform the deployment step of:

/assign mikeshng

Release plan?

the latest published version is somewhat a xxx.alpha.yy version. any plan to cut a non-alpha release for the command line binary?

@qiujian16

bootstrap token is not supported on all *KS

The boostrap token which is generated while initializing the hub is not supported by every *KS and thus the spoke fails to join.

In such case a service-account must be created and the sa token use as bootstrap token.

`clusteradm accept` does't find the pending CSR for the applying cluster

$ clusteradm accept --clusters cluster1
no CSR to approve for cluster

the clusteradm tools cannot find the corresponding CSR resource if the bootstrap token is signed manually instead of reusing
the generated tokens from clusteradm init commands.

in our case the bootstrap token is copied from the default namespace instead of open-cluster-management which leads to the clusteradm to ignore the pending CSR from the agent that mounts the manual bootstrap token.

if !groups.Has(groupNameBootstrap) &&
!groups.Has(groupNameSA) {

kind of curious why are we filtering the CSRs by the .spec.groups?

Registration agent stopped updating its lease.

The AVAILABLE status started after joining the cluster to the hub is True, the following information:

NAME       HUB ACCEPTED   MANAGED CLUSTER URLS         JOINED   AVAILABLE   AGE
cluster1       true           https://ip:6443          True         True        32s

But after a while, found that the cluster AVAILABLE status automatically changed to Unknown. here is the information:

# kc get managedcluster
NAME       HUB ACCEPTED   MANAGED CLUSTER URLS         JOINED   AVAILABLE   AGE
cluster1   true           https://ip:6443   True     Unknown     36m
#oc describe managedcluster cluster1
Message:               Accepted by hub cluster admin
    Reason:                HubClusterAdminAccepted
    Status:                True
    Type:                  HubAcceptedManagedCluster
    Last Transition Time:  2021-08-18T21:48:26Z
    Message:               Registration agent stopped updating its lease.
    Reason:                ManagedClusterLeaseUpdateStopped
    Status:                Unknown
    Type:                  ManagedClusterConditionAvailable
    Last Transition Time:  2021-08-18T15:25:45Z
    Message:               Managed cluster joined
    Reason:                ManagedClusterJoined
    Status:                True
    Type:                  ManagedClusterJoined

Error when appove managed cluster to hub cluster

#clusteradm accept --clusters c2
CSR c2-mq8rj already approved
Error: no CSR to approve for cluster c2

workaround:
I reinstalled the Hub Cluster and it is working fine.
#clusteradm accept --clusters c2
CSR c3-sgxp4 approved
set hubAcceptsClient to true for managed cluster c2

command to create a sample app

In order to ease the barrier of entry for deploying applications across multicluster using OCM, create a new clusteradm subcommand that generates a sample application that can be deployed into multiple managed clusters. This inspiration comes from the helm create command: https://helm.sh/docs/helm/helm_create

I suggest we starts with something easy: clusteradm create app sample-app
This will create a folder sample-app containing yaml files that upon kubectl apply will perform a helm repo nginx app deployment to all the managed clusters.

What do you think @itdove ?

/assign mikeshng

more command to manage addons

We can to clusteradm addon enable today to enable a certain addon. It is valuable to also

  1. list all addons on hub
  2. list all enabled addon on a managedcluster
  3. disable an addon on a cluster

clean up the control plane

We can now use clusteradm to destroy a managed cluster. I will be also helpful to cleanup the hub cluster use cluteradm also.

Error when join a managedCluster

I'm using the clusteradm v0.1.0-alpha.5v.1

After run clusteradm join ... command, I got this error message:

E0812 06:32:36.654581  454000 memcache.go:196] couldn't get resource list for operator.open-cluster-management.io/v1: the server could not find the requested resource
Error: no matches for kind "Klusterlet" in version "operator.open-cluster-management.io/v1"

Use clusteradm to upgrade ocm

after we finish this #82, we should also has a command to upgrade cluster manager and klusterlet to a higher version.

/kind feature

csr的名称中含有随机字符串

我的控制集群名称是cluster133,托管集群名称是cluster135,但是接收到的csr的名称确实cluster135-mt49j,有随机数,这个是什么原因导致的呀?怎么排查这个问题呢?

Should it not use hub apiserver host as the managed cluster?

I found after using clusteradm join new cluster to hub cluster. it use the hub apiserver host as the managed cluster. and then I checked the clusteradm code, is the cluster ip the managed cluster external server ip/host, right? if it's right, it need user to specify it, as shown in the following example:

#kubectl get managedcluster
NAME       HUB ACCEPTED   MANAGED CLUSTER URLS         JOINED   AVAILABLE   AGE
cluster1   true           https://hub apiserver host:6443   True       True           21m
cluster2   true           https://hub apiserver host:6443     True      True           64s

External server host, klusterlets.cr.yaml is it not correct ?

Race condition where applying the CR happens before the CRD is successfully deployed

Getting error when trying to deploy a cluster manager on kind cluster using clusteradm built from the source by following
https://github.com/open-cluster-management-io/clusteradm/blob/main/README.md#from-source

Error:
clusteradm init
E0714 16:01:52.864939 33569 memcache.go:196] couldn't get resource list for operator.open-cluster-management.io/v1: the server could not find the requested resource
Error: no matches for kind "ClusterManager" in version "operator.open-cluster-management.io/v1"

Steps to reproduce:
git clone https://github.com/open-cluster-management-io/clusteradm.git
cd clusteradm
make build
kubectl config use-context kind-hub
clusteradm init

Investigation by @mikeshng:

I think what is happening is there is for slower environment.
There is a race condition, where its applying the CR before the CRD is successfully deployed.
So:
https://github.com/open-cluster-management-io/clusteradm/blob/main/pkg/cmd/init/exec.go#L127 <- CR apply
gets run too fast before
https://github.com/open-cluster-management-io/clusteradm/blob/main/pkg/cmd/init/exec.go#L92 <- CRD apply
finishes.

Duplicated pod 'cluster-manager-placement-controller' after manually create a placement CRD and then called 'clusteradm init'

Manually deploy placement by following steps

  1. cd placement
  2. make images
  3. make deploy-hub
    Then, init the hub cluster by command clusteradm init
    Finally, we got 2 duplicated cluster-manager-placement-controller as following
open-cluster-management-hub   cluster-manager-placement-controller-66485c45fd-d92jt        1/1     Running     14         23h
open-cluster-management-hub   cluster-manager-placement-controller-745c576949-vg4xr        1/1     Running     26         22d

The expected behavior is,
The clusteradm init should at least check the same pod in namespace open-cluster-management-hub and open-cluster-management, if there already exist same pods, print a warning message and stop then.

Command clean failed

This issue is similiar to #130 .

When i'm trying to run clusteradm clean on a just-initialized hub, the clean wen wrong.
output:

╭─yuyao@redhats-MacBook-Pro ~
╰─$ clusteradm init --wait
Service account token successfully signed.
CRD successfully registered.
Registration operator is now available.
ClusterManager registration is now available.
The multicluster hub control plane has been initialized successfully!

You can now register cluster(s) to the hub control plane. Log onto those cluster(s) and run the following command:

    clusteradm join --hub-token eyJhbGciOiJSUzI1NiIsImtpZCI6InY4S3Z4NmZOS3BBR3dvcnJTaFBpM19iU0dVNVkwT3VQTGZTdzBqRkVrUkEifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJvcGVuLWNsdXN0ZXItbWFuYWdlbWVudCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJjbHVzdGVyLWJvb3RzdHJhcC10b2tlbi14YjY3diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJjbHVzdGVyLWJvb3RzdHJhcCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImZkM2YxZDE2LTEzMmEtNDZiOS1hYmIxLTE1MDIzOGQ3NzA0NCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpvcGVuLWNsdXN0ZXItbWFuYWdlbWVudDpjbHVzdGVyLWJvb3RzdHJhcCJ9.tIn7i9ktaLVAe79q-51dG_YYaNFPhPn72Ww3H00D9X4q0ACoudoTwVZ7z3huhaibM6vG9QgX04g4bm8wziW16qZqoUOQDjGiBp9ll7VOkcUaFWwPumeadFdsvHTUzCPC2d5s2oahVy1GMkfHnpPM_FCJ74q3-0fGjJMFaPtDblYbvNJc4jhoauU-00sUfcaqr7PYW6Xf4hUXzB972nT7173p8Qwe-f1TXxQPMptqpvj__yfmI9TZWwE_bNzjmUHDEO-cZ1LByOEazNGautGk8xT318Tx1LrTofqpT2hDUnORhQrdFDgRbarv-9m53C-OXHPxNj1gXmKtPCGY14pyEA --hub-apiserver https://127.0.0.1:62035 --wait --cluster-name <cluster_name>

Replace <cluster_name> with a cluster name of your choice. For example, cluster1.

╭─yuyao@redhats-MacBook-Pro ~
╰─$ clusteradm clean
2022/02/17 17:54:19 Wait to delete cluster manager resource: cluster-manager.
2022/02/17 17:55:23 Cluster Manager resource should be deleted firstly.
╭─yuyao@redhats-MacBook-Pro ~
╰─$ clusteradm clean                                                                                                          
The multicluster hub control plane has been clean up successfully!
╭─yuyao@redhats-MacBook-Pro ~
╰─$ clusteradm clean
Error: hub not be initialized

At first call, seems that applied resources not be deleted completely, so an error occured WaitResourceToBeDelete
Wait to delete cluster manager resource: cluster-manager.

At second call the command deleted all resources.

And the command works at third call.

"Error: the registration agent is not ready yet, please check it manually" when joining a cluster

Following the quick start in https://open-cluster-management.io/getting-started/quick-start/ , when I run the clusteradm join command, the command stays stuck in "Waiting for the management components to become ready..." and then it times out.

Waiting for the management components to become ready...
Error: the registration agent is not ready yet, please check it manually

It looks like it's waiting for all components installed by Klusterlet to be available, however some components are only started after the clusteredm accept command is ran on the hub, and in that scenario then all components become available.

Klusterlet cannot be deleted in command unjoin

When I'm trying to unjoin a managedcluster which just accepted by hub, it takes too long......
here is the output:

╭─yuyao@redhats-MacBook-Pro ~
╰─$ clusteradm unjoin --cluster-name cluster1 --context=kind-cluster1                                   
Remove applied resources in the managed cluster cluster1 ...
2022/02/17 15:17:39 Wait to deleted resource klusterlet.
2022/02/17 15:18:44 Wait to deleted resource klusterlet.
2022/02/17 15:23:59 Wait to deleted resource klusterlet.
2022/02/17 15:49:23 Wait to deleted resource klusterlet.
2022/02/17 15:49:23 Recource Klusterlet have been deleted firstly.
2022/02/17 15:49:23 Other recources have been deleted.
Applied reosuces have been deleted during the cluster1 joined stage.Also the status of mcl cluster1 will be unknown in the hub clusters

another try:

╭─yuyao@redhats-MacBook-Pro ~
╰─$ clusteradm unjoin --cluster-name cluster1 --context=kind-cluster1
Remove applied resources in the managed cluster cluster1 ...
2022/02/17 16:04:23 Wait to deleted resource klusterlet.
2022/02/17 16:05:25 Wait to deleted resource klusterlet.
2022/02/17 16:10:34 Wait to deleted resource klusterlet.
2022/02/17 16:37:18 Wait to deleted resource klusterlet.
2022/02/17 16:37:18 Recource Klusterlet have been deleted firstly.
2022/02/17 16:37:18 Other recources have been deleted.
Applied reosuces have been deleted during the cluster1 joined stage.Also the status of mcl cluster1 will be unknown in the hub clusters

The program blocking at "Wait to deleted resource klusterlet." for more than 30 min.
Even this, the klusterlet is not deleted

clusteradm support "--image-repository string"

When executing clusteradm in an env which cannot access quay.io/open-cluster-management/registration-operator:latest, it failed with following error message:

couldn't get resource list for operator.open-cluster-management.io/v1: the server could not find the requested resource
Error: no matches for kind "ClusterManager" in version "operator.open-cluster-management.io/v1"

Just like kubeadm, it is better for clusteradm to support option of --image-repository string to specify image repo of control plane.

Pin multicloud-operators-subscription version to latest release

Hello

Currently, the latest tag of the multicloud-operators-subscription image fails,
open-cluster-management-io/multicloud-operators-subscription#106.

clusteradm uses the latest tag to create the application manager addon,
so this effectively broke clusteradm as well.

Pinning the version to the latest release v0.6.0,
as done in this fork, works.

Based on this ci workflow,
the latest tag is being pushed as a development version, and it doesn't reflect the "latest release".
Unless this changes and latest tag will reference the "latest release",
it will probably be a good idea to pin the multicloud-operators-subscription to the actual current latest release, v0.6.0.

Provide more up to date content in CLI output

Currently, the entire standard output of the cli command is fixed.

@mdelder suggested that we can enhance that by adding some dynamic content that we can fetch in real time. For example, retrieve more up to date "what's next" information from https://open-cluster-management.io and display it to the user. That way whenever the website is updated, the cli return output is also updated automatically.

/assign mikeshng

Log will be helpful to contributors.

I found that there is not any log for this project.
I think this is not really friendly to contributors. When error happens, I really have no idea what was going on.

Even the backtrace will be helpful. But. I only got one line error. That make little scense.

cluseradm unjoin

After a cluster is joined as a managed cluster, it needs an operation to unjoin the managed cluster.
clusteradm unjoin

Unexported struct functions for Option struct

I'm eager for using the clusteradm repository as a package for my automation tools and noticed that the Option struct has several functions not exported, making it impossible to use outside of its package.

Would be great to understand what's the reason for closing (sic) this and if you're open to contributions on providing visibility to these functions. As I said, I'd like to use the commands from my code and not launch a process using the bare binary.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.