Skip to content

Instantly share code, notes, and snippets.

@sbeliakou
Created March 13, 2021 23:37
Show Gist options
  • Save sbeliakou/a7ba7e115ad109ed93efed17efe55caa to your computer and use it in GitHub Desktop.
Save sbeliakou/a7ba7e115ad109ed93efed17efe55caa to your computer and use it in GitHub Desktop.
Cloning into 'anton_antanovich'...
name: anton_antanovich, master/849acf1 @ 2021-03-11 08:42:23 +0000
2021/03/13 23:25:19 config: tests/tomcat.yml
2021/03/13 23:25:19 verbosity: 2
2021/03/13 23:25:19 -----------------------------------------------------------------------------------
2021/03/13 23:25:19 Running '1.1 Tomcat', 1..16 tests
2021/03/13 23:25:19 -----------------------------------------------------------------------------------
2021/03/13 23:25:29 ✓ [1.1 Tomcat] => playbook lint (ansible-lint) (1), 6.609s
2021/03/13 23:25:30 ✓ [1.1 Tomcat] => playbook syntax check (--syntax-check) (1), 1.264s
2021/03/13 23:27:26 ✓ [1.1 Tomcat] => apply playbook (3), 1m55.849s
2021/03/13 23:27:26 ✓ [1.1 Tomcat] => service process should run after rollout (2), 282ms
2021/03/13 23:27:31 ✓ [1.1 Tomcat] => responds 200 (2), 1.69s
2021/03/13 23:27:56 ✓ [1.1 Tomcat] => idempotency check (3), 24.975s
2021/03/13 23:27:56 ✓ [1.1 Tomcat] => should run after 2nd apply (2), 200ms
2021/03/13 23:27:56 ✓ [1.1 Tomcat] => shouldn't restart (3), 264ms
2021/03/13 23:27:56 ✓ [1.1 Tomcat] => service is enabled (1), 220ms
2021/03/13 23:27:56 ✓ [1.1 Tomcat] => 'tomcat_user' variable set as required (1), 71ms
2021/03/13 23:27:56 ✓ [1.1 Tomcat] => 'tomcat_group' variable set as required (1), 86ms
2021/03/13 23:29:50 ✓ [1.1 Tomcat] => service is running under non-priviliged user as per tomcat_user/tomcat_group (1), 1m53.766s
2021/03/13 23:29:50 ✓ [1.1 Tomcat] => 'tomcat_url' variable set as required (1), 26ms
2021/03/13 23:29:50 ✓ [1.1 Tomcat] => 'tomcat_home' variable set as required (1), 104ms
2021/03/13 23:32:04 ✓ [1.1 Tomcat] => can install into different home (1), 2m13.916s
2021/03/13 23:34:20 ✓ [1.1 Tomcat] => can apply under non-root user (3), 2m16.19s
2021/03/13 23:34:21 -----------------------------------------------------------------------------------
2021/03/13 23:34:21 Tests Summary:
2021/03/13 23:34:21 16 (of 16) tests passed, 0 tests failed; rated as 100.00%
2021/03/13 23:34:21
2021/03/13 23:34:21 Time Spent: 9m2.058s
2021/03/13 23:34:21 -----------------------------------------------------------------------------------
name: anton_antanovich, master/849acf1 @ 2021-03-11 08:42:23 +0000
2021/03/13 23:34:22 config: tests/webapp.yml
2021/03/13 23:34:22 verbosity: 2
2021/03/13 23:34:22 -----------------------------------------------------------------------------------
2021/03/13 23:34:22 Running '1.2 WebApp', 1..21 tests
2021/03/13 23:34:22 -----------------------------------------------------------------------------------
2021/03/13 23:34:30 ✓ [1.2 WebApp] => playbook lint (ansible-lint) (1), 5.539s
2021/03/13 23:34:31 ✓ [1.2 WebApp] => playbook syntax check (--syntax-check) (1), 909ms
2021/03/13 23:34:47 ✗ [1.2 WebApp] -> apply plybook
2021/03/13 23:34:47 Result: exit status 1
2021/03/13 23:34:47 Output:
(run, /tmp/students-1/anton_antanovich/day1/1.2) => ansible-playbook webapp-server.yml -i web-server, -v
rc: 2
output: |
No config file found; using defaults
PLAY [Installing webapp-server] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [web-server]
TASK [Create group webapp] *****************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "name": "webapp-server", "state": "present", "system": false}
TASK [Create user webapp] ******************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "comment": "", "create_home": false, "group": 1001, "home": "/opt/webapp-server/", "name": "webapp-server", "shell": "/bin/bash", "state": "present", "system": false, "uid": 1001}
TASK [Create a directory for bin] **********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-server//bin", "size": 4096, "state": "directory", "uid": 1001}
TASK [Create a directory for conf] *********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-server//conf", "size": 4096, "state": "directory", "uid": 1001}
TASK [Download App] ************************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "checksum_dest": null, "checksum_src": "28f105a4ed1478f27001141888cb86efc7ace7aa", "dest": "/opt/webapp-server//bin/webapp-server", "elapsed": 0, "gid": 0, "group": "root", "md5sum": "66e5a7366408e9db471e3e9586e01708", "mode": "0744", "msg": "OK (6213632 bytes)", "owner": "webapp-server", "size": 6213632, "src": "/root/.ansible/tmp/ansible-moduletmp-1615678480.24-y6jDzz/tmpRKAedk", "state": "file", "status_code": 200, "uid": 1001, "url": "https://playpit-labs-assets.s3-eu-west-1.amazonaws.com/webapp-server/webapp-server"}
TASK [Symlink install directory] ***********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "dest": "/etc/webapp-server", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 19, "src": "/opt/webapp-server/", "state": "link", "uid": 0}
TASK [Copy Users Configuration] ************************************************
changed: [web-server] => {"changed": true, "checksum": "9d9a68206bb86728ae9648c6f3b3d9eda21c5bb1", "dest": "/opt/webapp-server//conf/webapp-server.conf", "gid": 1001, "group": "webapp-server", "md5sum": "fbd5b8cd0c65a01bcf824d0b2177a892", "mode": "0644", "owner": "webapp-server", "size": 163, "src": "/root/.ansible/tmp/ansible_mitogen_action_42b99a8048d9ee07/source", "state": "file", "uid": 1001}
TASK [Copy systemd init file] **************************************************
changed: [web-server] => {"changed": true, "checksum": "a0341b16f2d005be4300497c2ef6f740287204da", "dest": "/usr/lib/systemd/system/webapp-server.service", "gid": 0, "group": "root", "md5sum": "b67b06556711f324784b56dcfdc8b007", "mode": "0644", "owner": "root", "size": 306, "src": "/root/.ansible/tmp/ansible_mitogen_action_37fe8e242cd0f76d/source", "state": "file", "uid": 0}
TASK [Ensure Service Enabled and Running] **************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "enabled": true, "name": "webapp-server", "state": "started", "status": {"ActiveEnterTimestampMonotonic": "0", "ActiveExitTimestampMonotonic": "0", "ActiveState": "inactive", "After": "system.slice network.target systemd-journald.socket basic.target", "AllowIsolate": "no", "AmbientCapabilities": "0", "AssertResult": "no", "AssertTimestampMonotonic": "0", "Before": "shutdown.target", "BlockIOAccounting": "no", "BlockIOWeight": "18446744073709551615", "CPUAccounting": "no", "CPUQuotaPerSecUSec": "infinity", "CPUSchedulingPolicy": "0", "CPUSchedulingPriority": "0", "CPUSchedulingResetOnFork": "no", "CPUShares": "18446744073709551615", "CanIsolate": "no", "CanReload": "no", "CanStart": "yes", "CanStop": "yes", "CapabilityBoundingSet": "18446744073709551615", "ConditionResult": "no", "ConditionTimestampMonotonic": "0", "Conflicts": "shutdown.target", "ControlPID": "0", "DefaultDependencies": "yes", "Delegate": "no", "Description": "Simple WebApp Server", "DevicePolicy": "auto", "EnvironmentFile": "/opt/webapp-server//conf/webapp-server.conf (ignore_errors=yes)", "ExecMainCode": "0", "ExecMainExitTimestampMonotonic": "0", "ExecMainPID": "0", "ExecMainStartTimestampMonotonic": "0", "ExecMainStatus": "0", "ExecStart": "{ path=/opt/webapp-server/bin/webapp-server ; argv[]=/opt/webapp-server//bin/webapp-server ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "ExecStop": "{ path=/bin/kill ; argv[]=/bin/kill -s QUIT $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FailureAction": "none", "FileDescriptorStoreMax": "0", "FragmentPath": "/usr/lib/systemd/system/webapp-server.service", "Group": "webapp-server", "GuessMainPID": "yes", "IOScheduling": "4", "Id": "webapp-server.service", "IgnoreOnIsolate": "no", "IgnoreOnSnapshot": "no", "IgnoreSIGPIPE": "yes", "InactiveEnterTimestampMonotonic": "0", "InactiveExitTimestampMonotonic": "0", "JobTimeoutAction": "none", "JobTimeoutUSec": "0", "KillMode": "control-group", "KillSignal": "15", "LimitAS": "18446744073709551615", "LimitCORE": "18446744073709551615", "LimitCPU": "18446744073709551615", "LimitDATA": "18446744073709551615", "LimitFSIZE": "18446744073709551615", "LimitLOCKS": "18446744073709551615", "LimitMEMLOCK": "67108864", "LimitMSGQUEUE": "819200", "LimitNICE": "0", "LimitNOFILE": "1048576", "LimitNPROC": "18446744073709551615", "LimitRSS": "18446744073709551615", "LimitRTPRIO": "0", "LimitRTTIME": "18446744073709551615", "LimitSIGPENDING": "29790", "LimitSTACK": "18446744073709551615", "LoadState": "loaded", "MainPID": "0", "MemoryAccounting": "no", "MemoryCurrent": "18446744073709551615", "MemoryLimit": "18446744073709551615", "MountFlags": "0", "Names": "webapp-server.service", "NeedDaemonReload": "no", "Nice": "0", "NoNewPrivileges": "no", "NonBlocking": "no", "NotifyAccess": "none", "OOMScoreAdjust": "0", "OnFailureJobMode": "replace", "PermissionsStartOnly": "no", "PrivateDevices": "no", "PrivateNetwork": "no", "PrivateTmp": "no", "ProtectHome": "no", "ProtectSystem": "no", "RefuseManualStart": "no", "RefuseManualStop": "no", "RemainAfterExit": "no", "Requires": "basic.target", "Restart": "no", "RestartUSec": "100ms", "Result": "success", "RootDirectoryStartOnly": "no", "RuntimeDirectoryMode": "0755", "SameProcessGroup": "no", "SecureBits": "0", "SendSIGHUP": "no", "SendSIGKILL": "yes", "Slice": "system.slice", "StandardError": "inherit", "StandardInput": "null", "StandardOutput": "journal", "StartLimitAction": "none", "StartLimitBurst": "5", "StartLimitInterval": "10000000", "StartupBlockIOWeight": "18446744073709551615", "StartupCPUShares": "18446744073709551615", "StatusErrno": "0", "StopWhenUnneeded": "no", "SubState": "dead", "SyslogLevelPrefix": "yes", "SyslogPriority": "30", "SystemCallErrorNumber": "0", "TTYReset": "no", "TTYVHangup": "no", "TTYVTDisallocate": "no", "TasksAccounting": "no", "TasksCurrent": "18446744073709551615", "TasksMax": "18446744073709551615", "TimeoutStartUSec": "1min 30s", "TimeoutStopUSec": "1min 30s", "TimerSlackNSec": "50000", "Transient": "no", "Type": "simple", "UMask": "0022", "UnitFilePreset": "disabled", "UnitFileState": "disabled", "User": "webapp-server", "Wants": "system.slice", "WatchdogTimestampMonotonic": "0", "WatchdogUSec": "0"}}
TASK [wait] ********************************************************************
fatal: [web-server]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "argument port is of type <type 'str'> and we were unable to convert to int: <type 'str'> cannot be converted to an int"}
RUNNING HANDLER [webapp-server restart] ****************************************
PLAY RECAP *********************************************************************
web-server : ok=10  changed=9  unreachable=0 failed=1  skipped=0 rescued=0 ignored=0
CMD Failed:
2021/03/13 23:34:47 ✓ [1.2 WebApp] => 'webapp-server' is running (2), 184ms
2021/03/13 23:34:47 ✓ [1.2 WebApp] => service responds 200 (2), 199ms
2021/03/13 23:35:15 ✗ [1.2 WebApp] -> playbook idempotency check
2021/03/13 23:35:15 Result: exit status 1
2021/03/13 23:35:15 Output:
(run, /tmp/students-1/anton_antanovich/day1/1.2) => ansible-playbook webapp-server.yml -i web-server, -v
rc: 2
output: |
No config file found; using defaults
PLAY [Installing webapp-server] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [web-server]
TASK [Create group webapp] *****************************************************
ok: [web-server] => {"ansible_facts": {}, "changed": false, "gid": 1001, "name": "webapp-server", "state": "present", "system": false}
TASK [Create user webapp] ******************************************************
ok: [web-server] => {"ansible_facts": {}, "append": false, "changed": false, "comment": "", "group": 1001, "home": "/opt/webapp-server/", "move_home": false, "name": "webapp-server", "shell": "/bin/bash", "state": "present", "uid": 1001}
TASK [Create a directory for bin] **********************************************
ok: [web-server] => {"ansible_facts": {}, "changed": false, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-server//bin", "size": 4096, "state": "directory", "uid": 1001}
TASK [Create a directory for conf] *********************************************
ok: [web-server] => {"ansible_facts": {}, "changed": false, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-server//conf", "size": 4096, "state": "directory", "uid": 1001}
TASK [Download App] ************************************************************
ok: [web-server] => {"ansible_facts": {}, "changed": false, "checksum_dest": "28f105a4ed1478f27001141888cb86efc7ace7aa", "checksum_src": "28f105a4ed1478f27001141888cb86efc7ace7aa", "dest": "/opt/webapp-server//bin/webapp-server", "elapsed": 5, "gid": 0, "group": "root", "md5sum": "66e5a7366408e9db471e3e9586e01708", "mode": "0744", "msg": "OK (6213632 bytes)", "owner": "webapp-server", "size": 6213632, "src": "/root/.ansible/tmp/ansible-moduletmp-1615678497.32-IK6jNt/tmpnbBtHQ", "state": "file", "status_code": 200, "uid": 1001, "url": "https://playpit-labs-assets.s3-eu-west-1.amazonaws.com/webapp-server/webapp-server"}
TASK [Symlink install directory] ***********************************************
ok: [web-server] => {"ansible_facts": {}, "changed": false, "dest": "/etc/webapp-server", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 19, "src": "/opt/webapp-server/", "state": "link", "uid": 0}
TASK [Copy Users Configuration] ************************************************
ok: [web-server] => {"changed": false, "checksum": "9d9a68206bb86728ae9648c6f3b3d9eda21c5bb1", "dest": "/opt/webapp-server//conf/webapp-server.conf", "gid": 1001, "group": "webapp-server", "mode": "0644", "owner": "webapp-server", "path": "/opt/webapp-server//conf/webapp-server.conf", "size": 163, "state": "file", "uid": 1001}
TASK [Copy systemd init file] **************************************************
ok: [web-server] => {"changed": false, "checksum": "a0341b16f2d005be4300497c2ef6f740287204da", "dest": "/usr/lib/systemd/system/webapp-server.service", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "path": "/usr/lib/systemd/system/webapp-server.service", "size": 306, "state": "file", "uid": 0}
TASK [Ensure Service Enabled and Running] **************************************
ok: [web-server] => {"ansible_facts": {}, "changed": false, "enabled": true, "name": "webapp-server", "state": "started", "status": {"ActiveEnterTimestamp": "Sat 2021-03-13 23:34:46 UTC", "ActiveEnterTimestampMonotonic": "356379365819", "ActiveExitTimestampMonotonic": "0", "ActiveState": "active", "After": "network.target system.slice systemd-journald.socket basic.target", "AllowIsolate": "no", "AmbientCapabilities": "0", "AssertResult": "yes", "AssertTimestamp": "Sat 2021-03-13 23:34:46 UTC", "AssertTimestampMonotonic": "356379364687", "Before": "shutdown.target multi-user.target", "BlockIOAccounting": "no", "BlockIOWeight": "18446744073709551615", "CPUAccounting": "no", "CPUQuotaPerSecUSec": "infinity", "CPUSchedulingPolicy": "0", "CPUSchedulingPriority": "0", "CPUSchedulingResetOnFork": "no", "CPUShares": "18446744073709551615", "CanIsolate": "no", "CanReload": "no", "CanStart": "yes", "CanStop": "yes", "CapabilityBoundingSet": "18446744073709551615", "ConditionResult": "yes", "ConditionTimestamp": "Sat 2021-03-13 23:34:46 UTC", "ConditionTimestampMonotonic": "356379364685", "Conflicts": "shutdown.target", "ControlGroup": "/docker/41ed46b50b256fb0c4e95fe5795b17ec67009f8bcc861e684307260bccd81024/system.slice/webapp-server.service", "ControlPID": "0", "DefaultDependencies": "yes", "Delegate": "no", "Description": "Simple WebApp Server", "DevicePolicy": "auto", "EnvironmentFile": "/opt/webapp-server//conf/webapp-server.conf (ignore_errors=yes)", "ExecMainCode": "0", "ExecMainExitTimestampMonotonic": "0", "ExecMainPID": "2068", "ExecMainStartTimestamp": "Sat 2021-03-13 23:34:46 UTC", "ExecMainStartTimestampMonotonic": "356379365704", "ExecMainStatus": "0", "ExecStart": "{ path=/opt/webapp-server/bin/webapp-server ; argv[]=/opt/webapp-server//bin/webapp-server ; ignore_errors=no ; start_time=[Sat 2021-03-13 23:34:46 UTC] ; stop_time=[n/a] ; pid=2068 ; code=(null) ; status=0/0 }", "ExecStop": "{ path=/bin/kill ; argv[]=/bin/kill -s QUIT $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FailureAction": "none", "FileDescriptorStoreMax": "0", "FragmentPath": "/usr/lib/systemd/system/webapp-server.service", "Group": "webapp-server", "GuessMainPID": "yes", "IOScheduling": "4", "Id": "webapp-server.service", "IgnoreOnIsolate": "no", "IgnoreOnSnapshot": "no", "IgnoreSIGPIPE": "yes", "InactiveEnterTimestampMonotonic": "0", "InactiveExitTimestamp": "Sat 2021-03-13 23:34:46 UTC", "InactiveExitTimestampMonotonic": "356379365819", "JobTimeoutAction": "none", "JobTimeoutUSec": "0", "KillMode": "control-group", "KillSignal": "15", "LimitAS": "18446744073709551615", "LimitCORE": "18446744073709551615", "LimitCPU": "18446744073709551615", "LimitDATA": "18446744073709551615", "LimitFSIZE": "18446744073709551615", "LimitLOCKS": "18446744073709551615", "LimitMEMLOCK": "67108864", "LimitMSGQUEUE": "819200", "LimitNICE": "0", "LimitNOFILE": "1048576", "LimitNPROC": "18446744073709551615", "LimitRSS": "18446744073709551615", "LimitRTPRIO": "0", "LimitRTTIME": "18446744073709551615", "LimitSIGPENDING": "29790", "LimitSTACK": "18446744073709551615", "LoadState": "loaded", "MainPID": "2068", "MemoryAccounting": "no", "MemoryCurrent": "18446744073709551615", "MemoryLimit": "18446744073709551615", "MountFlags": "0", "Names": "webapp-server.service", "NeedDaemonReload": "no", "Nice": "0", "NoNewPrivileges": "no", "NonBlocking": "no", "NotifyAccess": "none", "OOMScoreAdjust": "0", "OnFailureJobMode": "replace", "PermissionsStartOnly": "no", "PrivateDevices": "no", "PrivateNetwork": "no", "PrivateTmp": "no", "ProtectHome": "no", "ProtectSystem": "no", "RefuseManualStart": "no", "RefuseManualStop": "no", "RemainAfterExit": "no", "Requires": "basic.target", "Restart": "no", "RestartUSec": "100ms", "Result": "success", "RootDirectoryStartOnly": "no", "RuntimeDirectoryMode": "0755", "SameProcessGroup": "no", "SecureBits": "0", "SendSIGHUP": "no", "SendSIGKILL": "yes", "Slice": "system.slice", "StandardError": "inherit", "StandardInput": "null", "StandardOutput": "journal", "StartLimitAction": "none", "StartLimitBurst": "5", "StartLimitInterval": "10000000", "StartupBlockIOWeight": "18446744073709551615", "StartupCPUShares": "18446744073709551615", "StatusErrno": "0", "StopWhenUnneeded": "no", "SubState": "running", "SyslogLevelPrefix": "yes", "SyslogPriority": "30", "SystemCallErrorNumber": "0", "TTYReset": "no", "TTYVHangup": "no", "TTYVTDisallocate": "no", "TasksAccounting": "no", "TasksCurrent": "18446744073709551615", "TasksMax": "18446744073709551615", "TimeoutStartUSec": "1min 30s", "TimeoutStopUSec": "1min 30s", "TimerSlackNSec": "50000", "Transient": "no", "Type": "simple", "UMask": "0022", "UnitFilePreset": "disabled", "UnitFileState": "enabled", "User": "webapp-server", "WantedBy": "multi-user.target", "Wants": "system.slice", "WatchdogTimestamp": "Sat 2021-03-13 23:34:46 UTC", "WatchdogTimestampMonotonic": "356379365784", "WatchdogUSec": "0"}}
TASK [wait] ********************************************************************
fatal: [web-server]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "argument port is of type <type 'str'> and we were unable to convert to int: <type 'str'> cannot be converted to an int"}
PLAY RECAP *********************************************************************
web-server : ok=10  changed=0 unreachable=0 failed=1  skipped=0 rescued=0 ignored=0
CMD Failed:
2021/03/13 23:35:15 ✓ [1.2 WebApp] => service shouldn't restart (2), 238ms
2021/03/13 23:35:15 ✓ [1.2 WebApp] => service should run after 2nd apply (2), 238ms
2021/03/13 23:35:15 ✓ [1.2 WebApp] => service is enabled (1), 152ms
2021/03/13 23:35:30 ✗ [1.2 WebApp] -> can use 'student_first_name/student_last_name' variables
2021/03/13 23:35:30 Result: exit status 1
2021/03/13 23:35:30 Output:
(run, /tmp/students-1/anton_antanovich/day1/1.2) => ansible-playbook webapp-server.yml -i web-server, -e student_first_name=Mary -e student_last_name=Moore
rc: 2
output: |
PLAY [Installing webapp-server] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [web-server]
TASK [Create group webapp] *****************************************************
ok: [web-server]
TASK [Create user webapp] ******************************************************
ok: [web-server]
TASK [Create a directory for bin] **********************************************
ok: [web-server]
TASK [Create a directory for conf] *********************************************
ok: [web-server]
TASK [Download App] ************************************************************
ok: [web-server]
TASK [Symlink install directory] ***********************************************
ok: [web-server]
TASK [Copy Users Configuration] ************************************************
changed: [web-server]
TASK [Copy systemd init file] **************************************************
ok: [web-server]
TASK [Ensure Service Enabled and Running] **************************************
ok: [web-server]
TASK [wait] ********************************************************************
fatal: [web-server]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "argument port is of type <type 'str'> and we were unable to convert to int: <type 'str'> cannot be converted to an int"}
RUNNING HANDLER [webapp-server restart] ****************************************
PLAY RECAP *********************************************************************
web-server : ok=10  changed=1  unreachable=0 failed=1  skipped=0 rescued=0 ignored=0
CMD Failed:
2021/03/13 23:35:46 ✗ [1.2 WebApp] -> can set custom port
2021/03/13 23:35:46 Result: exit status 1
2021/03/13 23:35:46 Output:
(run, /tmp/students-1/anton_antanovich/day1/1.2) => ansible-playbook webapp-server.yml -i web-server, -e student_first_name=Mary -e student_last_name=Moore -e webapp_port=8081
rc: 2
output: |
PLAY [Installing webapp-server] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [web-server]
TASK [Create group webapp] *****************************************************
ok: [web-server]
TASK [Create user webapp] ******************************************************
ok: [web-server]
TASK [Create a directory for bin] **********************************************
ok: [web-server]
TASK [Create a directory for conf] *********************************************
ok: [web-server]
TASK [Download App] ************************************************************
ok: [web-server]
TASK [Symlink install directory] ***********************************************
ok: [web-server]
TASK [Copy Users Configuration] ************************************************
changed: [web-server]
TASK [Copy systemd init file] **************************************************
ok: [web-server]
TASK [Ensure Service Enabled and Running] **************************************
ok: [web-server]
TASK [wait] ********************************************************************
fatal: [web-server]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "argument port is of type <type 'str'> and we were unable to convert to int: <type 'str'> cannot be converted to an int"}
RUNNING HANDLER [webapp-server restart] ****************************************
PLAY RECAP *********************************************************************
web-server : ok=10  changed=1  unreachable=0 failed=1  skipped=0 rescued=0 ignored=0
CMD Failed:
2021/03/13 23:35:46 ✓ [1.2 WebApp] => use 'checksum' when downloading WebApp binary (get_url) (1), 35ms
2021/03/13 23:35:47 ✓ [1.2 WebApp] => service is running under 'webapp-server:webapp-server' (1), 737ms
2021/03/13 23:35:47 ✓ [1.2 WebApp] => app/service user has no password set (1), 180ms
2021/03/13 23:35:47 ✓ [1.2 WebApp] => playbook has no hardcoded 'webapp_user' (1), 19ms
2021/03/13 23:35:47 ✓ [1.2 WebApp] => playbook has no hardcoded 'webapp_group' (1), 19ms
2021/03/13 23:36:15 ✗ [1.2 WebApp] -> can use 'webapp_user/webapp_group' variables
2021/03/13 23:36:15 Result: exit status 1
2021/03/13 23:36:15 Output:
web-server
4bfaccc58f1c2175373901a1659a37c897cba03f93dc0d3dd58474bf1909b46d
(run, /tmp/students-1/anton_antanovich/day1/1.2) => ansible-playbook webapp-server.yml -i web-server, -e webapp_user=webapp1user -e webapp_group=webapp1group
rc: 2
output: |
PLAY [Installing webapp-server] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [web-server]
TASK [Create group webapp] *****************************************************
changed: [web-server]
TASK [Create user webapp] ******************************************************
changed: [web-server]
TASK [Create a directory for bin] **********************************************
changed: [web-server]
TASK [Create a directory for conf] *********************************************
changed: [web-server]
TASK [Download App] ************************************************************
changed: [web-server]
TASK [Symlink install directory] ***********************************************
changed: [web-server]
TASK [Copy Users Configuration] ************************************************
changed: [web-server]
TASK [Copy systemd init file] **************************************************
changed: [web-server]
TASK [Ensure Service Enabled and Running] **************************************
changed: [web-server]
TASK [wait] ********************************************************************
fatal: [web-server]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "argument port is of type <type 'str'> and we were unable to convert to int: <type 'str'> cannot be converted to an int"}
RUNNING HANDLER [webapp-server restart] ****************************************
PLAY RECAP *********************************************************************
web-server : ok=10  changed=9  unreachable=0 failed=1  skipped=0 rescued=0 ignored=0
CMD Failed: ansible-playbook webapp-server.yml -i web-server, -e webapp_user=webapp1user -e webapp_group=webapp1group
2021/03/13 23:36:40 ✗ [1.2 WebApp] -> can install into different home dir
2021/03/13 23:36:40 Result: exit status 1
2021/03/13 23:36:40 Output:
web-server
6cde6a54e5193581e754fe9d50d00e06566d3ba20d8e27e917d4cb4069b7351a
(run, /tmp/students-1/anton_antanovich/day1/1.2) => ansible-playbook webapp-server.yml -i web-server, -v -e webapp_home=/opt/webapp-test
rc: 2
output: |
No config file found; using defaults
PLAY [Installing webapp-server] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [web-server]
TASK [Create group webapp] *****************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "name": "webapp-server", "state": "present", "system": false}
TASK [Create user webapp] ******************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "comment": "", "create_home": false, "group": 1001, "home": "/opt/webapp-test", "name": "webapp-server", "shell": "/bin/bash", "state": "present", "system": false, "uid": 1001}
TASK [Create a directory for bin] **********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-test/bin", "size": 4096, "state": "directory", "uid": 1001}
TASK [Create a directory for conf] *********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-test/conf", "size": 4096, "state": "directory", "uid": 1001}
TASK [Download App] ************************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "checksum_dest": null, "checksum_src": "28f105a4ed1478f27001141888cb86efc7ace7aa", "dest": "/opt/webapp-test/bin/webapp-server", "elapsed": 2, "gid": 0, "group": "root", "md5sum": "66e5a7366408e9db471e3e9586e01708", "mode": "0744", "msg": "OK (6213632 bytes)", "owner": "webapp-server", "size": 6213632, "src": "/root/.ansible/tmp/ansible-moduletmp-1615678591.04-LMe5dX/tmpDeSL5K", "state": "file", "status_code": 200, "uid": 1001, "url": "https://playpit-labs-assets.s3-eu-west-1.amazonaws.com/webapp-server/webapp-server"}
TASK [Symlink install directory] ***********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "dest": "/etc/webapp-server", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 16, "src": "/opt/webapp-test", "state": "link", "uid": 0}
TASK [Copy Users Configuration] ************************************************
changed: [web-server] => {"changed": true, "checksum": "9d9a68206bb86728ae9648c6f3b3d9eda21c5bb1", "dest": "/opt/webapp-test/conf/webapp-server.conf", "gid": 1001, "group": "webapp-server", "md5sum": "fbd5b8cd0c65a01bcf824d0b2177a892", "mode": "0644", "owner": "webapp-server", "size": 163, "src": "/root/.ansible/tmp/ansible_mitogen_action_e6def38bf1a1b6af/source", "state": "file", "uid": 1001}
TASK [Copy systemd init file] **************************************************
changed: [web-server] => {"changed": true, "checksum": "a525acddf6720a7202a13edce749537ccd23856e", "dest": "/usr/lib/systemd/system/webapp-server.service", "gid": 0, "group": "root", "md5sum": "2459cde80c082d9c5e77376a15a3af6b", "mode": "0644", "owner": "root", "size": 300, "src": "/root/.ansible/tmp/ansible_mitogen_action_8e8d51e4d637fc69/source", "state": "file", "uid": 0}
TASK [Ensure Service Enabled and Running] **************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "enabled": true, "name": "webapp-server", "state": "started", "status": {"ActiveEnterTimestampMonotonic": "0", "ActiveExitTimestampMonotonic": "0", "ActiveState": "inactive", "After": "systemd-journald.socket system.slice basic.target network.target", "AllowIsolate": "no", "AmbientCapabilities": "0", "AssertResult": "no", "AssertTimestampMonotonic": "0", "Before": "shutdown.target", "BlockIOAccounting": "no", "BlockIOWeight": "18446744073709551615", "CPUAccounting": "no", "CPUQuotaPerSecUSec": "infinity", "CPUSchedulingPolicy": "0", "CPUSchedulingPriority": "0", "CPUSchedulingResetOnFork": "no", "CPUShares": "18446744073709551615", "CanIsolate": "no", "CanReload": "no", "CanStart": "yes", "CanStop": "yes", "CapabilityBoundingSet": "18446744073709551615", "ConditionResult": "no", "ConditionTimestampMonotonic": "0", "Conflicts": "shutdown.target", "ControlPID": "0", "DefaultDependencies": "yes", "Delegate": "no", "Description": "Simple WebApp Server", "DevicePolicy": "auto", "EnvironmentFile": "/opt/webapp-test/conf/webapp-server.conf (ignore_errors=yes)", "ExecMainCode": "0", "ExecMainExitTimestampMonotonic": "0", "ExecMainPID": "0", "ExecMainStartTimestampMonotonic": "0", "ExecMainStatus": "0", "ExecStart": "{ path=/opt/webapp-test/bin/webapp-server ; argv[]=/opt/webapp-test/bin/webapp-server ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "ExecStop": "{ path=/bin/kill ; argv[]=/bin/kill -s QUIT $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FailureAction": "none", "FileDescriptorStoreMax": "0", "FragmentPath": "/usr/lib/systemd/system/webapp-server.service", "Group": "webapp-server", "GuessMainPID": "yes", "IOScheduling": "4", "Id": "webapp-server.service", "IgnoreOnIsolate": "no", "IgnoreOnSnapshot": "no", "IgnoreSIGPIPE": "yes", "InactiveEnterTimestampMonotonic": "0", "InactiveExitTimestampMonotonic": "0", "JobTimeoutAction": "none", "JobTimeoutUSec": "0", "KillMode": "control-group", "KillSignal": "15", "LimitAS": "18446744073709551615", "LimitCORE": "18446744073709551615", "LimitCPU": "18446744073709551615", "LimitDATA": "18446744073709551615", "LimitFSIZE": "18446744073709551615", "LimitLOCKS": "18446744073709551615", "LimitMEMLOCK": "67108864", "LimitMSGQUEUE": "819200", "LimitNICE": "0", "LimitNOFILE": "1048576", "LimitNPROC": "18446744073709551615", "LimitRSS": "18446744073709551615", "LimitRTPRIO": "0", "LimitRTTIME": "18446744073709551615", "LimitSIGPENDING": "29790", "LimitSTACK": "18446744073709551615", "LoadState": "loaded", "MainPID": "0", "MemoryAccounting": "no", "MemoryCurrent": "18446744073709551615", "MemoryLimit": "18446744073709551615", "MountFlags": "0", "Names": "webapp-server.service", "NeedDaemonReload": "no", "Nice": "0", "NoNewPrivileges": "no", "NonBlocking": "no", "NotifyAccess": "none", "OOMScoreAdjust": "0", "OnFailureJobMode": "replace", "PermissionsStartOnly": "no", "PrivateDevices": "no", "PrivateNetwork": "no", "PrivateTmp": "no", "ProtectHome": "no", "ProtectSystem": "no", "RefuseManualStart": "no", "RefuseManualStop": "no", "RemainAfterExit": "no", "Requires": "basic.target", "Restart": "no", "RestartUSec": "100ms", "Result": "success", "RootDirectoryStartOnly": "no", "RuntimeDirectoryMode": "0755", "SameProcessGroup": "no", "SecureBits": "0", "SendSIGHUP": "no", "SendSIGKILL": "yes", "Slice": "system.slice", "StandardError": "inherit", "StandardInput": "null", "StandardOutput": "journal", "StartLimitAction": "none", "StartLimitBurst": "5", "StartLimitInterval": "10000000", "StartupBlockIOWeight": "18446744073709551615", "StartupCPUShares": "18446744073709551615", "StatusErrno": "0", "StopWhenUnneeded": "no", "SubState": "dead", "SyslogLevelPrefix": "yes", "SyslogPriority": "30", "SystemCallErrorNumber": "0", "TTYReset": "no", "TTYVHangup": "no", "TTYVTDisallocate": "no", "TasksAccounting": "no", "TasksCurrent": "18446744073709551615", "TasksMax": "18446744073709551615", "TimeoutStartUSec": "1min 30s", "TimeoutStopUSec": "1min 30s", "TimerSlackNSec": "50000", "Transient": "no", "Type": "simple", "UMask": "0022", "UnitFilePreset": "disabled", "UnitFileState": "disabled", "User": "webapp-server", "Wants": "system.slice", "WatchdogTimestampMonotonic": "0", "WatchdogUSec": "0"}}
TASK [wait] ********************************************************************
fatal: [web-server]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "argument port is of type <type 'str'> and we were unable to convert to int: <type 'str'> cannot be converted to an int"}
RUNNING HANDLER [webapp-server restart] ****************************************
PLAY RECAP *********************************************************************
web-server : ok=10  changed=9  unreachable=0 failed=1  skipped=0 rescued=0 ignored=0
CMD Failed:
2021/03/13 23:36:40 ✓ [1.2 WebApp] => can use different source url (1), 15ms
2021/03/13 23:37:03 ✗ [1.2 WebApp] -> can apply under non-root user
2021/03/13 23:37:03 Result: exit status 1
2021/03/13 23:37:03 Output:
web-server
2429be7b6b4bc7df76cce1e4c0c0dc7ee8be9b233a9e28d8f9a7a5fc2f473d1c
(run, /tmp/students-1/anton_antanovich/day1/1.2) => ansible-playbook webapp-server.yml -i web-server, -v -u devops
rc: 2
output: |
No config file found; using defaults
PLAY [Installing webapp-server] ************************************************
TASK [Gathering Facts] *********************************************************
ok: [web-server]
TASK [Create group webapp] *****************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "name": "webapp-server", "state": "present", "system": false}
TASK [Create user webapp] ******************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "comment": "", "create_home": false, "group": 1001, "home": "/opt/webapp-server/", "name": "webapp-server", "shell": "/bin/bash", "state": "present", "system": false, "uid": 1001}
TASK [Create a directory for bin] **********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-server//bin", "size": 4096, "state": "directory", "uid": 1001}
TASK [Create a directory for conf] *********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "gid": 1001, "group": "webapp-server", "mode": "0755", "owner": "webapp-server", "path": "/opt/webapp-server//conf", "size": 4096, "state": "directory", "uid": 1001}
TASK [Download App] ************************************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "checksum_dest": null, "checksum_src": "28f105a4ed1478f27001141888cb86efc7ace7aa", "dest": "/opt/webapp-server//bin/webapp-server", "elapsed": 1, "gid": 0, "group": "root", "md5sum": "66e5a7366408e9db471e3e9586e01708", "mode": "0744", "msg": "OK (6213632 bytes)", "owner": "webapp-server", "size": 6213632, "src": "/root/.ansible/tmp/ansible-moduletmp-1615678615.34-qxguSq/tmpiuLlYK", "state": "file", "status_code": 200, "uid": 1001, "url": "https://playpit-labs-assets.s3-eu-west-1.amazonaws.com/webapp-server/webapp-server"}
TASK [Symlink install directory] ***********************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "dest": "/etc/webapp-server", "gid": 0, "group": "root", "mode": "0777", "owner": "root", "size": 19, "src": "/opt/webapp-server/", "state": "link", "uid": 0}
TASK [Copy Users Configuration] ************************************************
changed: [web-server] => {"changed": true, "checksum": "9d9a68206bb86728ae9648c6f3b3d9eda21c5bb1", "dest": "/opt/webapp-server//conf/webapp-server.conf", "gid": 1001, "group": "webapp-server", "md5sum": "fbd5b8cd0c65a01bcf824d0b2177a892", "mode": "0644", "owner": "webapp-server", "size": 163, "src": "/root/.ansible/tmp/ansible_mitogen_action_fe6bc1f3e9fca7ce/source", "state": "file", "uid": 1001}
TASK [Copy systemd init file] **************************************************
changed: [web-server] => {"changed": true, "checksum": "a0341b16f2d005be4300497c2ef6f740287204da", "dest": "/usr/lib/systemd/system/webapp-server.service", "gid": 0, "group": "root", "md5sum": "b67b06556711f324784b56dcfdc8b007", "mode": "0644", "owner": "root", "size": 306, "src": "/root/.ansible/tmp/ansible_mitogen_action_c4954c4b0c190e83/source", "state": "file", "uid": 0}
TASK [Ensure Service Enabled and Running] **************************************
changed: [web-server] => {"ansible_facts": {}, "changed": true, "enabled": true, "name": "webapp-server", "state": "started", "status": {"ActiveEnterTimestampMonotonic": "0", "ActiveExitTimestampMonotonic": "0", "ActiveState": "inactive", "After": "network.target system.slice systemd-journald.socket basic.target", "AllowIsolate": "no", "AmbientCapabilities": "0", "AssertResult": "no", "AssertTimestampMonotonic": "0", "Before": "shutdown.target", "BlockIOAccounting": "no", "BlockIOWeight": "18446744073709551615", "CPUAccounting": "no", "CPUQuotaPerSecUSec": "infinity", "CPUSchedulingPolicy": "0", "CPUSchedulingPriority": "0", "CPUSchedulingResetOnFork": "no", "CPUShares": "18446744073709551615", "CanIsolate": "no", "CanReload": "no", "CanStart": "yes", "CanStop": "yes", "CapabilityBoundingSet": "18446744073709551615", "ConditionResult": "no", "ConditionTimestampMonotonic": "0", "Conflicts": "shutdown.target", "ControlPID": "0", "DefaultDependencies": "yes", "Delegate": "no", "Description": "Simple WebApp Server", "DevicePolicy": "auto", "EnvironmentFile": "/opt/webapp-server//conf/webapp-server.conf (ignore_errors=yes)", "ExecMainCode": "0", "ExecMainExitTimestampMonotonic": "0", "ExecMainPID": "0", "ExecMainStartTimestampMonotonic": "0", "ExecMainStatus": "0", "ExecStart": "{ path=/opt/webapp-server/bin/webapp-server ; argv[]=/opt/webapp-server//bin/webapp-server ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "ExecStop": "{ path=/bin/kill ; argv[]=/bin/kill -s QUIT $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FailureAction": "none", "FileDescriptorStoreMax": "0", "FragmentPath": "/usr/lib/systemd/system/webapp-server.service", "Group": "webapp-server", "GuessMainPID": "yes", "IOScheduling": "4", "Id": "webapp-server.service", "IgnoreOnIsolate": "no", "IgnoreOnSnapshot": "no", "IgnoreSIGPIPE": "yes", "InactiveEnterTimestampMonotonic": "0", "InactiveExitTimestampMonotonic": "0", "JobTimeoutAction": "none", "JobTimeoutUSec": "0", "KillMode": "control-group", "KillSignal": "15", "LimitAS": "18446744073709551615", "LimitCORE": "18446744073709551615", "LimitCPU": "18446744073709551615", "LimitDATA": "18446744073709551615", "LimitFSIZE": "18446744073709551615", "LimitLOCKS": "18446744073709551615", "LimitMEMLOCK": "67108864", "LimitMSGQUEUE": "819200", "LimitNICE": "0", "LimitNOFILE": "1048576", "LimitNPROC": "18446744073709551615", "LimitRSS": "18446744073709551615", "LimitRTPRIO": "0", "LimitRTTIME": "18446744073709551615", "LimitSIGPENDING": "29790", "LimitSTACK": "18446744073709551615", "LoadState": "loaded", "MainPID": "0", "MemoryAccounting": "no", "MemoryCurrent": "18446744073709551615", "MemoryLimit": "18446744073709551615", "MountFlags": "0", "Names": "webapp-server.service", "NeedDaemonReload": "no", "Nice": "0", "NoNewPrivileges": "no", "NonBlocking": "no", "NotifyAccess": "none", "OOMScoreAdjust": "0", "OnFailureJobMode": "replace", "PermissionsStartOnly": "no", "PrivateDevices": "no", "PrivateNetwork": "no", "PrivateTmp": "no", "ProtectHome": "no", "ProtectSystem": "no", "RefuseManualStart": "no", "RefuseManualStop": "no", "RemainAfterExit": "no", "Requires": "basic.target", "Restart": "no", "RestartUSec": "100ms", "Result": "success", "RootDirectoryStartOnly": "no", "RuntimeDirectoryMode": "0755", "SameProcessGroup": "no", "SecureBits": "0", "SendSIGHUP": "no", "SendSIGKILL": "yes", "Slice": "system.slice", "StandardError": "inherit", "StandardInput": "null", "StandardOutput": "journal", "StartLimitAction": "none", "StartLimitBurst": "5", "StartLimitInterval": "10000000", "StartupBlockIOWeight": "18446744073709551615", "StartupCPUShares": "18446744073709551615", "StatusErrno": "0", "StopWhenUnneeded": "no", "SubState": "dead", "SyslogLevelPrefix": "yes", "SyslogPriority": "30", "SystemCallErrorNumber": "0", "TTYReset": "no", "TTYVHangup": "no", "TTYVTDisallocate": "no", "TasksAccounting": "no", "TasksCurrent": "18446744073709551615", "TasksMax": "18446744073709551615", "TimeoutStartUSec": "1min 30s", "TimeoutStopUSec": "1min 30s", "TimerSlackNSec": "50000", "Transient": "no", "Type": "simple", "UMask": "0022", "UnitFilePreset": "disabled", "UnitFileState": "disabled", "User": "webapp-server", "Wants": "system.slice", "WatchdogTimestampMonotonic": "0", "WatchdogUSec": "0"}}
TASK [wait] ********************************************************************
fatal: [web-server]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "argument port is of type <type 'str'> and we were unable to convert to int: <type 'str'> cannot be converted to an int"}
RUNNING HANDLER [webapp-server restart] ****************************************
PLAY RECAP *********************************************************************
web-server : ok=10  changed=9  unreachable=0 failed=1  skipped=0 rescued=0 ignored=0
CMD Failed:
2021/03/13 23:37:03 ✓ [1.2 WebApp] => playbook has 'handlers' (1), 14ms
2021/03/13 23:37:03 -----------------------------------------------------------------------------------
2021/03/13 23:37:03 Tests Summary:
2021/03/13 23:37:03 14 (of 21) tests passed, 7 tests failed; rated as 66.67%
2021/03/13 23:37:03
2021/03/13 23:37:03 Time Spent: 2m41.962s
2021/03/13 23:37:03 -----------------------------------------------------------------------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment