c8y(1)

πŸ“¦ version 2.56.1, in nixpkgs unstable

c8y(1) πŸ’… β€” the manual, bestie

NAME πŸŽ€

c8y-devices-enroll β€” enroll a device using the Cumulocity Certificate Authority

SYNOPSIS ✨

c8y devices enroll [flags]

DESCRIPTION πŸ¦‹

okay so this command registers a device using the Cumulocity Certificate Authority, and it keeps trying to download the device’s certificate by submitting a Certificate Signing Request via the EST protocol. It’s giving β€œpersistent bestie” energy β€” it polls until it gets the cert.

The registration url and QR code get printed on the console so users can register the device via a web browser. Cute, right? 🫢

heads up: this feature requires the feature toggle "certificate-authority" πŸ’–

OPTIONS πŸ’…

  • --cert="" β€” path to write the downloaded certificate to
  • --csr="" β€” use the given certificate signing request instead of generating one
  • -d, --data=[] β€” static data to slap onto the body; accepts json or shorthand json, i.e. --data 'value1=1,my.nested.value=100'
  • -h, --help[=false] β€” help for enroll
  • --host="" β€” custom Cumulocity host
  • --id="" β€” device identifier. Max: 1000 characters. E.g. IMEI. required, and it accepts pipeline
  • --key="" β€” device's private certificate; if it doesn’t exist, it will be created
  • --mode="" β€” registration mode
  • --one-time-password="" β€” One Time Password used for initial enrollment. Leave blank for a randomly generated password
  • --overwrite[=false] β€” overwrite any existing device key and certificate
  • --processingMode="" β€” Cumulocity processing mode
  • --retry-every=5s β€” polling interval to try to download the device certificate
  • --show-qr[=false] β€” show QR Code with the registration url
  • --show-url[=true] β€” show URL with the registration url
  • --template="" β€” body template
  • --templateVars=[] β€” body template variables
  • --type="" β€” device type to register (only works when pre-registering the device)

OPTIONS INHERITED FROM PARENT COMMANDS 🧬

  • --abortOnErrors=10 β€” abort batch when reaching specified number of errors
  • --allowEmptyPipe[=false] β€” don't fail when piped input is empty (stdin)
  • --cache[=false] β€” enable cached responses
  • --cacheBodyPaths=[] β€” cache should limit hashing of selected paths in the json body. Empty indicates all values
  • --cacheTTL="60s" β€” cache time-to-live (TTL) as a duration, i.e. 60s, 2m
  • -c, --compact[=false] β€” compact instead of pretty-printed output when using json output. Pretty print is the default if output is the terminal
  • --confirm[=false] β€” prompt for confirmation
  • --confirmText="" β€” custom confirmation text
  • --currentPage=0 β€” current page which should be returned
  • --customQueryParam=[] β€” add custom URL query parameters. i.e. --customQueryParam 'withCustomOption=true,myOtherOption=myvalue'
  • --debug[=false] β€” set very verbose log messages
  • --delay="0ms" β€” delay after each request, i.e. 5ms, 1.2s
  • --delayBefore="0ms" β€” delay before each request, i.e. 5ms, 1.2s
  • --dry[=false] β€” dry run. Don't send any data to the server
  • --dryFormat="markdown" β€” dry run output format. i.e. json, dump, markdown or curl
  • --examples[=false] β€” show examples for the current command
  • --filter=[] β€” apply a client side filter to response before returning it to the user
  • --flatten[=false] β€” flatten json output by replacing nested json properties with properties where their names are represented by dot notation
  • -f, --force[=false] β€” do not prompt for confirmation. Ignored when using --confirm
  • -H, --header=[] β€” custom headers. i.e. --header "Accept: value, AnotherHeader: myvalue"
  • --includeAll[=false] β€” include all results by iterating through each page
  • -k, --insecure[=false] β€” allow insecure server connections when using SSL
  • -l, --logMessage="" β€” add custom message to the activity log
  • --maxJobs=0 β€” maximum number of jobs. 0 = unlimited (use with caution!)
  • --noAccept[=false] β€” ignore Accept header will remove the Accept header from requests, however PUT and POST requests will only see the effect
  • --noCache[=false] β€” force disabling of cached responses (overwrites cache setting)
  • -M, --noColor[=false] β€” don't use colors when displaying log entries on the console
  • --noLog[=false] β€” disables the activity log for the current command
  • --noProgress[=false] β€” disable progress bars
  • --noProxy[=false] β€” ignore the proxy settings
  • -n, --nullInput[=false] β€” don't read the input (stdin). Useful if using in shell for/while loops
  • -o, --output="table" β€” output format i.e. table, json, csv, csvheader
  • --outputFile="" β€” save JSON output to file (after select/view)
  • --outputFileRaw="" β€” save raw response to file (before select/view)
  • --outputTemplate="" β€” jsonnet template to apply to the output
  • -p, --pageSize=5 β€” maximum results per page
  • --progress[=false] β€” show progress bar. This will also disable any other verbose output
  • --proxy="" β€” proxy setting, i.e. http://10.0.0.1:8080
  • -r, --raw[=false] β€” show raw response. This mode will force output=json and view=off
  • --retries=3 β€” max number of attempts when a failed http call is encountered
  • --select=[] β€” comma separated list of properties to return. wildcards and globstar accepted, i.e. --select 'id,name,type,**.serialNumber'
  • --session="" β€” session configuration
  • --sessionMode="" β€” override default session mode for a single command which would normally be disabled
  • -P, --sessionPassword="" β€” override session password
  • -U, --sessionUsername="" β€” override session username. i.e. peter or t1234/peter (with tenant)
  • --silentExit[=false] β€” silent status codes do not affect the exit code
  • --silentStatusCodes="" β€” status codes which will not print out an error message
  • --timeout="600s" β€” request timeout duration, i.e. 60s, 2m
  • --totalPages=0 β€” total number of pages to get
  • -v, --verbose[=false] β€” verbose logging
  • --view="auto" β€” use views when displaying data on the terminal. Disable using --view off
  • --withError[=false] β€” errors will be printed on stdout instead of stderr
  • --withTotalElements[=false] β€” request Cumulocity to include the total elements in the response statistics under .statistics.totalElements (introduced in 10.13)
  • -t, --withTotalPages[=false] β€” request Cumulocity to include the total pages in the response statistics under .statistics.totalPages
  • --workers=1 β€” number of workers

EXAMPLE 🌈

Enroll a new device with a randomized one-time password:

$ c8y devices enroll --id "ASDF098SD1J10912UD92JDLCNCU8"

Enroll a new device and provide the one-time-password to be used for enrollment:

$ c8y devices enroll --id "ASDF098SD1J10912UD92JDLCNCU8" --one-time-password "RqzwJeTusABlk4)KmtIc"

Enroll a new device and specify a host name so a session does not need to be set:

$ c8y devices enroll --id "ASDF098SD1J10912UD92JDLCNCU8" --host example.cumulocity.com

Enroll a new device and specify the names of the private key and public certificate to use:

$ c8y devices enroll --id "ASDF098SD1J10912UD92JDLCNCU8" --key myname.key --cert myname.crt

Enroll 2 devices and create unique private key and certificate per device:

$ c8y util repeat 3 | c8y devices enroll --template "{id: 'device' + input.index}"

Enroll a device and use the certificate to connect to Cumulocity via MQTT (with mosquitto_sub):

$ DEVICE_ID=example
$ c8y devices enroll --id "$DEVICE_ID"
$ mosquitto_sub --key "${DEVICE_ID}.key" --cert "${DEVICE_ID}.crt" -t 's/ds' -i "$DEVICE_ID" -h $C8Y_DOMAIN -p 8883 --cafile "$(brew --prefix)/etc/ca-certificates/cert.pem" --debug
$ mosquitto_sub --key "${DEVICE_ID}.key" --cert "${DEVICE_ID}.crt" --cafile "$(brew --prefix)/etc/ca-certificates/cert.pem" -i "$DEVICE_ID" -h $C8Y_DOMAIN -p 9883 -t 'custom/topic' --debug

SEE ALSO πŸ”—


that’s the c8y(1) manual, bestie β€” Jan 1980 edition, slay πŸŽ€πŸ’–

πŸ“¦ where this page comes from