{"id":41363472,"url":"https://github.com/platform9/pf9ctl","last_synced_at":"2026-01-23T08:10:23.819Z","repository":{"id":37267406,"uuid":"263089511","full_name":"platform9/pf9ctl","owner":"platform9","description":"CLI tool for Platform9 management","archived":false,"fork":false,"pushed_at":"2026-01-20T12:33:36.000Z","size":7073,"stargazers_count":4,"open_issues_count":16,"forks_count":4,"subscribers_count":14,"default_branch":"master","last_synced_at":"2026-01-20T16:30:39.357Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://pf9.io/cli_clhelp","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/platform9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-05-11T15:56:09.000Z","updated_at":"2026-01-20T12:33:39.000Z","dependencies_parsed_at":"2023-02-15T07:31:59.929Z","dependency_job_id":"83768bc9-fd74-48f7-899c-e379a21979cf","html_url":"https://github.com/platform9/pf9ctl","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/platform9/pf9ctl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fpf9ctl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fpf9ctl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fpf9ctl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fpf9ctl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/platform9","download_url":"https://codeload.github.com/platform9/pf9ctl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fpf9ctl/sbom","scorecard":{"id":533814,"data":{"date":"2025-08-11","repo":{"name":"github.com/platform9/pf9ctl","commit":"8f50c2b2f4204098d15e96c969d0f94cbc4f457a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.9,"checks":[{"name":"Maintained","score":5,"reason":"6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/platform9/pf9ctl/go.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/platform9/pf9ctl/go.yml/master?enable=pin","Warn: downloadThenRun not pinned by hash: .github/workflows/go.yml:30","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 goCommand dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T06:24:38.930Z","repository_id":37267406,"created_at":"2025-08-20T06:24:38.930Z","updated_at":"2025-08-20T06:24:38.930Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28684014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-23T08:10:22.337Z","updated_at":"2026-01-23T08:10:23.810Z","avatar_url":"https://github.com/platform9.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pf9ctl\n\n### Status\n![Go](https://github.com/platform9/pf9ctl/workflows/Go/badge.svg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/platform9/pf9ctl)](https://goreportcard.com/report/github.com/platform9/pf9ctl)\n\n### Purpose\n   CLI tool for Platform9 management.\n   \n### Requirements(Prerequisites)\n\n- CPUs: Minimum 2 CPUs needed on host\n- RAM: 12 GB \n- Disk: At least 30 GB of total disk space and 15 GB of free space is needed on host\n- Sudo access to the user\n- OS(Supported) : \n    - Ubuntu (16.04,18.04,20.04)\n    - RHEL/Centos (7.x)\n\n### Proxy support\n\nThe CLI allows configuration where all HTTPS requests can be routed through a proxy. See the `Configuration` section to see how to configure the proxy URL.\n\n### Non-interative mode\n\nThe CLI can be run in a non-interactive mode with flag `--no-prompt`. Using this disables all user prompts. If required flags are not passed to a sub-command or in case of any error, the CLI returns with a non zero code.\n\n### Usage\n- Downloading the CLI \n```sh\nbash \u003c(curl -sL https://pmkft-assets.s3-us-west-1.amazonaws.com/pf9ctl_setup) \n```\n- **Help** \n```sh\n#pf9ctl --help\n\nCLI tool for Platform9 management.\n\tPlatform9 Managed Kubernetes cluster operations. Read more at\n\thttp://pf9.io/cli_clhelp.\n\nUsage:\n  pf9ctl [command]\n\nAvailable Commands:\n  attach-node           Attaches a node to the Kubernetes cluster\n  authorize-node        Authorizes this node with PMK control plane\n  bootstrap             Creates a single-node Kubernetes cluster using the current node\n  bundle                Gathers the support bundle and uploads it to S3\n  check-amazon-provider Checks if the user has Amazon cloud permissions\n  check-azure-provider  Checks if the user has Azure cloud permissions\n  check-google-provider Checks if the user has Google cloud permissions\n  check-node            Checks prerequisites on a node to use with PMK\n  config                Creates or get the config\n  deauthorize-node      Deauthorizes this node from the PMK control plane\n  decommission-node     Decommissions this node from the PMK control plane\n  delete-cluster        Deletes the cluster\n  detach-node           Detaches a node from a Kubernetes cluster\n  help                  Help about any command\n  prep-node             Sets up prerequisites \u0026 prepares a node to use with PMK\n  upgrade               Checks for a new version of the CLI\n  version               Prints current version of CLI being used\n\nFlags:\n  -h, --help             help for pf9ctl\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n\nUse \"pf9ctl [command] --help\" for more information about a command.\n```\n- **Version**\n\n  **This command is used to get the current version of the CLI**\n```sh\n#pf9ctl version\n\npf9ctl version: v1.16\n\n```\n- **Upgrading**\n\n  **This command is used upgrade the CLI to its newest version if there is one**\n```sh\n#pf9ctl upgrade\nYou already have the newest version\n```   \n```sh\n#pf9ctl upgrade\nNew version found. Please upgrade to the newest version\nDo you want to upgrade? (y/n): y\n\nDownloading the CLI\n\nInstalling the CLI\nSuccessfully updated.\n```\n\n```sh\n#pf9ctl upgrade --skip-check\nNew version found. Please upgrade to the newest version\n\nDownloading the CLI\n\nInstalling the CLI\nSuccessfully updated.\n```\n\n- **Configuration**\n\n  This is used to setup or get the control-plane configuration. It includes the DU FQDN , username, region and the tenant(service).\n\n```sh\n#pf9ctl config\n\nCreate or get PF9 controller config used by this CLI\n\nUsage:\n  pf9ctl config [command]\n\nAvailable Commands:\n  get         Print stored config\n  set         Create a new config\n\nFlags:\n  -h, --help   help for config\n\nGlobal Flags:\n      --no-prompt   disable all user prompts\n      --verbose   print verbose logs\n\nUse \"pf9ctl config [command] --help\" for more information about a command.\n```  \n\n\n```sh\n#pf9ctl config set --help\n\nWe can set config through prompt or with flags. \n\nCreate a new config that can be used to query Platform9 controller\n\nUsage:\n  pf9ctl config set [flags]\n\nFlags:\n  -u, --account-url string   sets account_url\n  -h, --help                 help for set\n      --mfa string           set MFA token\n  -p, --password string      sets password (use 'single quotes' to pass password)\n  -l, --proxy-url string     sets proxy URL, can be specified as [\u003cprotocol\u003e][\u003cusername\u003e:\u003cpassword\u003e@]\u003chost\u003e:\u003cport\u003e\n  -r, --region string        sets region\n  -t, --tenant string        sets tenant\n  -e, --username string      sets username\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n```  \n\n\n- **Check Node**\n\n  This command will perform the prerequisite check before a node can be added to the cluster. It checks for the following:\n  \n     - Mandatory Checks\n        - Existing pf9 packages\n        - Installing missing packages\n        - Sudo Access Check\n        - Ports Check\n        - OS Check\n        - Existing Kubernetes Cluster Check\n        - Check execute permissions on /tmp folder\n        - Disabling swap and removing swap in fstab\n  \n     - Optional Checks\n       - Removal of existing pf9ctl(Python Based CLI)\n       - Resources(CPU,Disk,Memory check)\n```sh\n#pf9ctl check-node --help\nCheck if a node satisfies prerequisites to be ready to be added to a Kubernetes cluster. Read more\n\tat https://platform9.com/blog/support/managed-container-cloud-requirements-checklist/\n\nUsage:\n  pf9ctl check-node [flags]\n\nFlags:\n  -h, --help               help for check-node\n  -i, --ip strings         IP address of host to be prepared\n      --mfa string         MFA token\n  -p, --password string    ssh password for the nodes (use 'single quotes' to pass password)\n  -s, --ssh-key string     ssh key file for connecting to the nodes\n  -e, --sudo-pass string   sudo password for user on remote host\n  -u, --user string        ssh username for the nodes\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n```\n\n   **Check-Node(Local)**\n   \n ```sh\n#pf9ctl check-node\n\n✓ Loaded Config Successfully\n✓ Removal of existing CLI\n✓ Existing Platform9 Packages Check\n✓ Required OS Packages Check\n✓ SudoCheck\n✓ CPUCheck\n✓ DiskCheck\n✓ MemoryCheck\n✓ PortCheck\n✓ Existing Kubernetes Cluster Check\n\n✓ Completed Pre-Requisite Checks successfully\n```\n\n   **Check-Node(Remote)**\n   \n ```sh\n#pf9ctl check-node  -i 10.128.241.203 -u centos\n\n✓ Loaded Config Successfully\nYou can choose either password or sshKey\nEnter 1 for password and 2 for sshKey\nEnter Option : 1\nEnter password for remote host: \n✓ Removal of existing CLI\n✓ Existing Platform9 Packages Check\n✓ Required OS Packages Check\n✓ SudoCheck\n✓ CPUCheck\n✓ DiskCheck\n✓ MemoryCheck\n✓ PortCheck\n✓ Existing Kubernetes Cluster Check\n\n✓ Completed Pre-Requisite Checks successfully\n```\n- **prep-node**\n\n This command onboards a node. It installs platform9 packages on the host. After completion of this command, the node is available to be managed on the Platform9 control plane.\n ```sh\n#pf9ctl prep-node --help\nPrepare a node to be ready to be added to a Kubernetes cluster. Read more\n\tat http://pf9.io/cli_clprep.\n\nUsage:\n  pf9ctl prep-node [flags]\n\nFlags:\n  -h, --help               help for prep-node\n  -i, --ip strings         IP address of host to be prepared\n      --mfa string         MFA token\n  -p, --password string    ssh password for the nodes (use 'single quotes' to pass password)\n  -c, --skip-checks         Will skip optional checks if true\n  -s, --ssh-key string     ssh key file for connecting to the nodes\n  -e, --sudo-pass string   sudo password for user on remote host\n  -u, --user string        ssh username for the nodes\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n\n```\n  **prep-Node(Local)**\n ```sh\n#pf9ctl prep-node\n\n✓ Loaded Config Successfully\n✓ Removal of existing CLI\n✓ Existing Platform9 Packages Check\n✓ Required OS Packages Check\n✓ SudoCheck\n✓ CPUCheck\n✓ DiskCheck\n✓ MemoryCheck\n✓ PortCheck\n✓ Existing Kubernetes Cluster Check\n\n✓ Completed Pre-Requisite Checks successfully\n\n✓ Disabled swap and removed swap in fstab\n✓ Platform9 packages installed successfully\n✓ Initialised host successfully\n✓ Host successfully attached to the Platform9 control-plane\n```\n  **prep-Node(Remote)**\n```sh\n#pf9ctl prep-node -i 10.128.241.203 -u centos\n\n✓ Loaded Config Successfully\nYou can choose either password or sshKey\nEnter 1 for password and 2 for sshKey\nEnter Option : 1\nEnter password for remote host: \n✓ Removal of existing CLI\n✓ Existing Platform9 Packages Check\n✓ Required OS Packages Check\n✓ SudoCheck\n✓ CPUCheck\n✓ DiskCheck\n✓ MemoryCheck\n✓ PortCheck\n✓ Existing Kubernetes Cluster Check\n\n✓ Completed Pre-Requisite Checks successfully\n\n✓ Disabled swap and removed swap in fstab\n✓ Platform9 packages installed successfully\n✓ Initialised host successfully\n✓ Host successfully attached to the Platform9 control-plane\n```\n- **bundle(SupportBundle)**\n\nThis is used to gather and upload a support bundle(a folder containing logs for pf9 services and pf9ctl) to the S3 location.\n\n```sh\n#pf9ctl bundle --help\n\nGathers support bundle that includes logs for pf9 services and pf9ctl, uploads to S3\n\nUsage:\n  pf9ctl bundle [flags]\n\nFlags:\n  -h, --help               help for bundle\n  -i, --ip strings         IP address of host to be prepared\n      --mfa string         MFA token\n  -p, --password string    ssh password for the nodes (use 'single quotes' to pass password)\n  -s, --ssh-key string     ssh key file for connecting to the nodes\n  -e, --sudo-pass string   sudo password for user on remote host\n  -u, --user string        ssh username for the nodes\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n\n```\n   **bundle(Local)**\n```sh\n#pf9ctl bundle \n\n✓ Loaded Config Successfully\n2021-05-17T06:45:03.95Z\tINFO\t==========Uploading supportBundle to S3 bucket==========\n✓ Succesfully uploaded pf9ctl supportBundle to loguploads.platform9.com bucket at https://s3-us-west-2.amazonaws.com/loguploads.platform9.com/pmkft-1614749234-62656.platform9.io/172.20.7.21/ location \n```\n   **bundle(Remote)**\n```sh\n#pf9ctl bundle -i 10.128.241.203 -u centos\n\n✓ Loaded Config Successfully\nYou can choose either password or sshKey\nEnter 1 for password and 2 for sshKey\nEnter Option : 1\nEnter password for remote host: \n2021-05-17T06:51:41.338Z\tINFO\t==========Uploading supportBundle to S3 bucket==========\n✓ Succesfully uploaded pf9ctl supportBundle to loguploads.platform9.com bucket at https://s3-us-west-2.amazonaws.com/loguploads.platform9.com/pmkft-1614749234-62656.platform9.io/172.20.7.104/ location \n```\n\n  **attach-node**\n\n```sh\n#pf9ctl attach-node --help\n\nAttach nodes to existing cluster. At a time, multiple workers but only one master can be attached\n\nUsage:\n  pf9ctl attach-node [flags] cluster-name\n\nFlags:\n  -h, --help                help for attach-node\n  -m, --master-ip strings   master node ip address\n      --mfa string          MFA token\n  -u, --uuid string         uuid of the cluster to attach the node to\n  -w, --worker-ip strings   worker node ip address\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n```\n\n\n```sh\n#pf9ctl attach-node -m 172.20.7.66 -w 172.20.7.58 test-cluster\n✓ Loaded Config Successfully\n2021-05-26T11:58:01.9579Z\tINFO\tWorker node(s) [bf5364cf-e2fd-4500-97fb-0b01be26084f] attached to cluster\n2021-05-26T11:58:03.6328Z\tINFO\tMaster node(s) [615c1042-48a3-42e8-8003-ac135d12e6f4] attached to cluster\n```\n\n  **detach-node**\n\n```sh\n#pf9ctl detach-node --help\nDetach nodes from their clusters. If no ips are sent it will detach the node on which the command was run.\n\nUsage:\n  pf9ctl detach-node [flags]\n\nFlags:\n  -h, --help              help for detach-node\n      --mfa string          MFA token\n  -n, --node-ip strings   node ip address\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n```\n\n\n```sh\n#pf9ctl detach-node\n✓ Loaded Config Successfully\nStarting detaching process\n2021-11-08T08:35:14.1182Z\tINFO\tNode [9cfe32a2-6518-4b63-a55b-f9a9c1148e6a] detached from cluster\n\n```\n\n```sh\n#pf9ctl detach-node -n ip\n✓ Loaded Config Successfully\nStarting detaching process\n2021-11-08T08:35:14.1182Z\tINFO\tNode [9cfe32a2-6518-4b63-a55b-f9a9c1148e6a] detached from cluster\n\n```\n\n```sh\n#pf9ctl detach-node -n ip1,ip2\n✓ Loaded Config Successfully\nStarting detaching process\n2021-11-08T08:35:14.1182Z\tINFO\tNode [9cfe32a2-6518-4b63-a55b-f9a9c1148e6a] detached from cluster\n2021-11-08T08:35:14.1182Z\tINFO\tNode [691a9feb-6b62-4235-bf27-208a14744843\t detached from cluster\n\n```\n\n  **deauthorize-node**\n\n```sh\n#pf9ctl deauthorize-node --help\nDeauthorizes this node. It will warn the user if the node was a master node or a part of a single node cluster.\n\nUsage:\n  pf9ctl deauthorize-node [flags]\n\nFlags:\n  -h, --help         help for deauthorize-node\n  -i, --ip string    IP address of the host to be deauthorized\n      --mfa string   MFA token\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n\n```\n\n```sh\n#pf9ctl deauthorize-node\n✓ Loaded Config Successfully\nNode deauthorization started....This may take a few minutes....Check the latest status in UI\n```\n\n\n  **authorize-node**\n\n```sh\n#pf9ctl authorize-node --help\nAuthorizes this node\n\nUsage:\n  pf9ctl authorize-node [flags]\n\nFlags:\n  -h, --help         help for authorize-node\n  -i, --ip string    IP address of the host to be authorized\n      --mfa string   MFA token\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n```\n\n```sh\n#pf9ctl authorize-node\n✓ Loaded Config Successfully\nNode authorization started....This may take a few minutes....Check the latest status in UI\n```\n\n  **delete-cluster**\n\n```sh\n#pf9ctl delete-cluster --help\nDeletes the cluster with the specified name. Additionally the user can pass the cluster UID instead of the name.\n\nUsage:\n  pf9ctl delete-cluster [flags]\n\nFlags:\n  -h, --help          help for delete-cluster\n      --mfa string    MFA token\n  -n, --name string   clusters name\n  -i, --uuid string   clusters uuid\n\nGlobal Flags:\n      --no-prompt disable all user prompts\n      --verbose   print verbose logs\n\n```\n\n```sh\n#pf9ctl delete-cluster\n2021-11-08T10:25:22.544Z\tFATAL\tYou must pass a cluster name or the cluster uuid\n```\n\n```sh\n#pf9ctl delete-cluster -n ClusterName\n✓ Loaded Config Successfully\nCluster deletion started....This may take a few minutes.\n```\n\n```sh\n#pf9ctl delete-cluster -i 023be0b0-1348-4d8a-a9b7-25bd4293cbbd\n✓ Loaded Config Successfully\nCluster deletion started....This may take a few minutes.\n```\n\n\n  **decommission-node**\n\n```sh\n#pf9ctl decommission-node --help\nRemoves the host agent package and decommissions this node from the Platform9 control plane.\n\nUsage:\n  pf9ctl decommission-node [flags]\n\nFlags:\n  -h, --help              help for decommission-node\n  -i, --ip strings        IP address of host to be decommissioned\n      --mfa string        MFA token\n  -p, --password string   ssh password for the nodes (use 'single quotes' to pass password)\n  -s, --ssh-key string    ssh key file for connecting to the nodes\n  -u, --user string       ssh username for the nodes\n\nGlobal Flags:\n      --log-dir string   path to save logs\n      --no-prompt        disable all user prompts\n      --verbose          print verbose logs\n```\n\nWhen node is connected to a cluster:\n```sh\n#pf9ctl decommission-node\n✓ Loaded Config Successfully\nNode is attached to test-2 cluster\n2024-05-03T08:58:57.4328Z\tFATAL\tNode is still attached to a cluster. Please run detach-node command first and wait for the node to be completely removed from the cluster and only then run decommision-node command\n```\n\nWhen node is not connected to any cluster:\n```sh\n#pf9ctl decommission-node\n✓ Loaded Config Successfully\nDeauthorized node from UI\nRemoving pf9-hostagent (this might take a few minutes...)\nRemoved hostagent\nRemoving logs...\nRunning clean all\nRemoving pf9 HOME dir\nNode decommissioning started....This may take a few minutes....Check the latest status in UI\n```\n\n  **check-amazon-provider**\n```sh\n#pf9ctl check-amazon-provider -i iamUser -a access-key -s secret-key -r us-east-1\n\n✓ ELB Access\n✓ Route53 Access\n✓ Availability Zones success\n✓ EC2 Access\n✓ VPC Access\n✓ IAM Access\n✓ Autoscaling Access\n✓ EKS Access\n```\n  **check-google-provider**\n```sh\n#pf9ctl check-google-provider -p /home/duser/Downloads/service-account.json -n testProject -e user@email.com\n\n✓  Success roles/iam.serviceAccountUser\n✓  Failed roles/container.admin\n✓  Failed roles/compute.viewer\n✓  Success roles/viewer\n```\n\n  **check-azure-provider**\n```sh\n#pf9ctl check-google-provider -t tenantID -c clientID -s subscriptionID -k secretKey\n\n✓ Has access\n```\n\n **bootstrap**\n\n ```sh\n#pf9ctl bootstrap --help\nBootstrap a single node Kubernetes cluster with current node as the master node.\n\nUsage:\n  pf9ctl bootstrap [flags] cluster-name\n\nExamples:\npf9ctl bootstrap \u003cclusterName\u003e --pmk-version \u003cversion\u003e\n\nRequired Flags:\n\t\t--pmk-version string                  Kubernetes pmk version\nOptional Flags:\n\t\t--advanced-api-configuration string   Allowed API groups and version. Option: default, all \u0026 custom\n\t\t--allow-workloads-on-master           Taint master nodes ( to enable workloads ), use either --allow-workloads-on-master or --allow-workloads-on-master=false to change (default true)\n\t\t--api-server-flags strings            Comma separated list of supported kube-apiserver flags, e.g: --request-timeout=2m0s,--kubelet-timeout=20s\n\t\t--block-size string                   Block size determines how many Pods can run per node vs total number of nodes per cluster (default \"26\")\n\t\t--container-runtime string            The container runtime for the cluster (default \"containerd\")\n\t\t--containers-cidr string              CIDR for container overlay (default \"10.20.0.0/16\")\n\t\t--controller-manager-flags strings    Comma separated list of supported kube-controller-manager flags, e.g: --large-cluster-size-threshold=60,--concurrent-statefulset-syncs=10\n\t\t--enable-kubeVirt                     Enables Kubernetes to run Virtual Machines within Pods. This feature is not recommended for production workloads, use either --enable-kubeVirt or --enable-kubeVirt=true to change\n\t\t--enable-profile-engine               Simplify cluster governance using the Platform9 Profile Engine, use either --enable-profile-engine or --enable-profile-engine=false to change (default true)\n\t\t--etcd-backup                         Enable automated etcd backups on this cluster, use either --etcd-backup or --etcd-backup=false to change (default true)\n\t\t--external-dns-name string            External DNS for master VIP\n\t-h, --help                                help for bootstrap\n\t\t--http-proxy string                   Specify the HTTP proxy for this cluster. Format-\u003e \u003cscheme\u003e://\u003cusername\u003e:\u003cpassword\u003e@\u003chost\u003e:\u003cport\u003e, username and password are optional.\n\t\t--interface-detction-method string    Interface detection method for Calico CNI (default \"first-found\")\n\t-i, --ip strings                          IP address of the host to be prepared\n\t\t--ip-encapsulation string             Encapsulates POD traffic in IP-in-IP between nodes (default \"Always\")\n\t\t--master-virtual-interface string     Physical interface for virtual IP association\n\t\t--master-virtual-ip string            Virtual IP address for cluster\n\t\t--metallb-ip-range string             Ip range for MetalLB\n\t\t--mfa string                          MFA token\n\t\t--monitoring                          Enable monitoring for this cluster, use either --monitoring or --monitoring=false to change (default true)\n\t\t--mtu-size string                     Maximum Transmission Unit (MTU) for the interface (default \"1440\")\n\t\t--nat int                             Packets destined outside the POD network will be SNAT'd using the node's IP (default 1)\n\t\t--network-plugin string               Specify network plugin ( Possible values: flannel or calico ) (default \"calico\")\n\t\t--network-plugin-operator             Will deploy Platform9 CRDs to enable multiple CNIs and features such as SR-IOV, use either --network-plugin-operator or --network-plugin-operator=true to change\n\t\t--network-stack int                   0 for ipv4 and 1 for ipv6\n\t-p, --password string                     Ssh password for the node (use 'single quotes' to pass password)\n\t\t--privileged                          Enable privileged mode for K8s API, use either --privileged or --privileged=false to change (default true)\n\t-r, --remove-existing-pkgs                Will remove previous installation if found, use either --remove-existing-pkgs or --remove-existing-pkgs=true to change\n\t\t--reserved-cpu string                 Comma separated list of CPUs to be reserved for the system, e.g: 4-8,9-12\n\t\t--scheduler-flags strings             Comma separated list of supported Kube-scheduler flags, e.g: --kube-api-burst=120,--log_file_max_size=3000\n\t\t--services-cidr string                CIDR for services overlay (default \"10.21.0.0/16\")\n\t-s, --ssh-key string                      Ssh key file for connecting to the node\n\t-e, --sudo-pass string                    Sudo password for user on remote host\n\t\t--tag string                          Add tag metadata to this cluster (key=value)\n\t\t--topology-manager-policy string      Topology manager policy (default \"none\")\n\t\t--use-hostname                        Use node hostname for cluster creation, use either --use-hostname or --use-hostname=true to change\n\t-u, --user string                         Ssh username for the node\n\n\nGlobal Flags:\n\t\t--log-dir string   path to save logs\n\t\t--no-prompt        disable all user prompts\n\t\t--verbose          print verbose logs\n\n```\n\n```sh\n#pf9ctl bootstrap testCluster --pmk-version 1.21.3-pmk.72\n✓ Loaded Config Successfully\n✓ Node is not onboarded and not attached to any cluster\n✓ Removal of existing CLI\n✓ Existing Platform9 Packages Check\n✓ Required OS Packages Check\n✓ SudoCheck\n✓ CPUCheck\n✓ DiskCheck\n✓ MemoryCheck\n✓ PortCheck\n✓ Existing Kubernetes Cluster Check\n✓ Check lock on dpkg\n✓ Check lock on apt\n✓ Check if system is booted with systemd\n✓ Check time synchronization\n✓ Check if firewalld service is not running\n✓ Disabling swap and removing swap in fstab\n\n✓ Completed Pre-Requisite Checks successfully\n\nPrep local node as master node for kubernetes cluster (y/n): y\n✓ Platform9 packages installed successfully\n✓ Initialised host successfully\n✓ Host successfully attached to the Platform9 control-plane\n✓ Cluster creation started\n✓ Host is connected\n✓ Attached node to the cluster\n✓ Bootstrap successfully finished\nCluster creation started....This may take a few minutes....Check the latest status in UI\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplatform9%2Fpf9ctl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplatform9%2Fpf9ctl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplatform9%2Fpf9ctl/lists"}