hammer_cli_foreman 0.18.2 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/foreman.yml +20 -0
- data/doc/host_create.md +19 -10
- data/doc/release_notes.md +12 -4
- data/lib/hammer_cli_foreman/api/authenticator.rb +81 -0
- data/lib/hammer_cli_foreman/api/connection.rb +48 -33
- data/lib/hammer_cli_foreman/api/interactive_basic_auth.rb +2 -2
- data/lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb +100 -0
- data/lib/hammer_cli_foreman/api/oauth/password_grant.rb +81 -0
- data/lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb +34 -80
- data/lib/hammer_cli_foreman/auth.rb +54 -20
- data/lib/hammer_cli_foreman/authenticate/login.rb +21 -0
- data/lib/hammer_cli_foreman/command_extensions/hosts/help/compute_resources.rb +1 -0
- data/lib/hammer_cli_foreman/command_extensions/ping.rb +14 -0
- data/lib/hammer_cli_foreman/command_extensions/status.rb +44 -0
- data/lib/hammer_cli_foreman/command_extensions.rb +2 -0
- data/lib/hammer_cli_foreman/commands.rb +1 -1
- data/lib/hammer_cli_foreman/compute_attribute.rb +22 -5
- data/lib/hammer_cli_foreman/compute_resource/base.rb +1 -1
- data/lib/hammer_cli_foreman/compute_resource/ec2.rb +1 -1
- data/lib/hammer_cli_foreman/compute_resource/gce.rb +1 -1
- data/lib/hammer_cli_foreman/compute_resource/libvirt.rb +11 -8
- data/lib/hammer_cli_foreman/compute_resource/openstack.rb +1 -1
- data/lib/hammer_cli_foreman/compute_resource/ovirt.rb +7 -4
- data/lib/hammer_cli_foreman/compute_resource/rackspace.rb +1 -1
- data/lib/hammer_cli_foreman/compute_resource/vmware.rb +6 -6
- data/lib/hammer_cli_foreman/hosts/common_update_options.rb +1 -1
- data/lib/hammer_cli_foreman/location.rb +1 -1
- data/lib/hammer_cli_foreman/openid_connect.rb +68 -0
- data/lib/hammer_cli_foreman/organization.rb +1 -1
- data/lib/hammer_cli_foreman/output/formatters.rb +4 -5
- data/lib/hammer_cli_foreman/partition_table.rb +1 -0
- data/lib/hammer_cli_foreman/ping.rb +24 -0
- data/lib/hammer_cli_foreman/report_template.rb +3 -2
- data/lib/hammer_cli_foreman/sessions.rb +92 -0
- data/lib/hammer_cli_foreman/status.rb +53 -0
- data/lib/hammer_cli_foreman/subnet.rb +1 -0
- data/lib/hammer_cli_foreman/template.rb +1 -0
- data/lib/hammer_cli_foreman/version.rb +1 -1
- data/lib/hammer_cli_foreman.rb +8 -0
- data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/test/data/1.24/foreman_api.json +1 -0
- data/test/data/README.md +2 -2
- data/test/functional/commands/list_test.rb +2 -2
- data/test/functional/host_test.rb +0 -20
- data/test/functional/ping_test.rb +34 -0
- data/test/functional/status_test.rb +46 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-CreateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-InfoCommand-output.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-ListCommand-output.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Architecture.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter-DeleteCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter-ListCommand-output.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter-SetCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter-SetCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-CommonParameter.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-CreateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-InfoCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-ListCommand-output.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-ComputeResource.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-CreateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-DeleteParameterCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-DeleteParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-InfoCommand-output.xml +21 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-ListCommand-output.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-SetParameterCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-SetParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Domain-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Domain.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-CreateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-InfoCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-ListCommand-output.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Environment-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Environment.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-ExceptionHandler.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Host-CreateCommand-parameters.xml +46 -0
- data/test/reports/TEST-HammerCLIForeman-Host-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Host-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-DeleteParameterCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Host-DeleteParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-InfoCommand-output.xml +85 -0
- data/test/reports/TEST-HammerCLIForeman-Host-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Host-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-ListCommand-output.xml +21 -0
- data/test/reports/TEST-HammerCLIForeman-Host-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Host-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-PuppetRunCommand-output.xml +9 -0
- data/test/reports/TEST-HammerCLIForeman-Host-PuppetRunCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-SetParameterCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Host-SetParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-StatusCommand-output.xml +9 -0
- data/test/reports/TEST-HammerCLIForeman-Host-StatusCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host-UpdateCommand-parameters.xml +40 -0
- data/test/reports/TEST-HammerCLIForeman-Host-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Host.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-CreateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-DeleteCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-DeleteParameterCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-DeleteParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-InfoCommand-output.xml +29 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-InfoCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-ListCommand-output.xml +27 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-SetParameterCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-SetParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-UpdateCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Hostgroup.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Location-CreateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Location-CreateCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Location-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Location-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Location-DeleteCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Location-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Location-InfoCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Location-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Location-InfoCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Location-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Location-ListCommand-output.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Location-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Location-ListCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Location-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Location-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Location-UpdateCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Location-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Location.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-CreateCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-InfoCommand-output.xml +23 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-ListCommand-output.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-UpdateCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Medium-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Medium.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-CreateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-DeleteParameterCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-DeleteParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-InfoCommand-output.xml +27 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-ListCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-SetParameterCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-SetParameterCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-UpdateCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-OperatingSystem.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-CreateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-CreateCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-DeleteCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-InfoCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-InfoCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-ListCommand-output.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-ListCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-UpdateCommand-resource-disabled.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Organization-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Organization.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-CreateCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-DumpCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-DumpCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-InfoCommand-output.xml +19 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-ListCommand-output.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-UpdateCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-PartitionTable.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-CreateCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-InfoCommand-output.xml +21 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-ListCommand-output.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-ListCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-SmartProxy.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-CreateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-DeleteCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-InfoCommand-output.xml +43 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-InfoCommand-parameters.xml +13 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-ListCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-UpdateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Subnet.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template-CreateCommand-parameters.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Template-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template-DeleteCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Template-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template-DumpCommand-parameters.xml +12 -0
- data/test/reports/TEST-HammerCLIForeman-Template-DumpCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template-InfoCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Template-InfoCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Template-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template-ListCommand-output.xml +15 -0
- data/test/reports/TEST-HammerCLIForeman-Template-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-Template-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template-ListKindsCommand-parameters.xml +9 -0
- data/test/reports/TEST-HammerCLIForeman-Template-ListKindsCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template-UpdateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-Template-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-Template.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-User-CreateCommand-parameters.xml +19 -0
- data/test/reports/TEST-HammerCLIForeman-User-CreateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-User-DeleteCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-User-DeleteCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-User-InfoCommand-output.xml +23 -0
- data/test/reports/TEST-HammerCLIForeman-User-InfoCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-User-InfoCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-User-ListCommand-output.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-User-ListCommand-parameters.xml +17 -0
- data/test/reports/TEST-HammerCLIForeman-User-ListCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-User-UpdateCommand-parameters.xml +11 -0
- data/test/reports/TEST-HammerCLIForeman-User-UpdateCommand.xml +7 -0
- data/test/reports/TEST-HammerCLIForeman-User.xml +7 -0
- data/test/reports/TEST-MiniTest-Spec.xml +7 -0
- data/test/test_helper.rb +1 -1
- data/test/unit/api/interactive_basic_auth_test.rb +1 -1
- data/test/unit/api/oauth/oauth_authentication_code_grant_test.rb +88 -0
- data/test/unit/api/oauth/oauth_password_grant_test.rb +92 -0
- data/test/unit/api/session_authenticator_wrapper_test.rb +85 -70
- data/test/unit/sessions_test.rb +199 -0
- metadata +600 -81
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 39c04732f825e9e11d775e76b74b527ddb1db099cd29770530f2f7df1274a484
|
|
4
|
+
data.tar.gz: bbadb602bf0eb3836db5aaa90aad41b0d1f38be39749c2d7292398181d668dbc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 567f870185f45995e3dd4341321ecea98ab099a7b387a63457ded17b6752d2cd0f27c3eb2fdf7649058762855f4583839ec73b5e9140f4c993f971ee230ae2e1
|
|
7
|
+
data.tar.gz: aeb5cea9ec9175f27045b57cfc43575fde5a559061dbcf243f048aa60401e734900746a1939c565adb503b562287bc47b15ea821813933fa98ab6284dc4b71fc
|
data/config/foreman.yml
CHANGED
|
@@ -6,9 +6,29 @@
|
|
|
6
6
|
:host: 'https://localhost/'
|
|
7
7
|
|
|
8
8
|
# Credentials. You'll be asked for them interactively if you leave them blank here
|
|
9
|
+
# Possible values:
|
|
10
|
+
|
|
11
|
+
# Basic Auth:
|
|
12
|
+
#:default_auth_type: 'Basic_Auth'
|
|
9
13
|
:username: 'admin'
|
|
10
14
|
#:password: 'example'
|
|
11
15
|
|
|
16
|
+
# Oauth using the Password Grant Flow:
|
|
17
|
+
# This authentication method requires sessions to be enabled, uncomment the following
|
|
18
|
+
# lines to use this authentication method.
|
|
19
|
+
#:default_auth_type: 'Oauth_Password_Grant'
|
|
20
|
+
#:oidc_token_endpoint: https://keycloak.example.com/token
|
|
21
|
+
#:oidc_client_id: example-client-id
|
|
22
|
+
|
|
23
|
+
# Oauth using Authentication Code Flow(Two Factor):
|
|
24
|
+
# This authentication method requires sessions to be enabled, uncomment the following
|
|
25
|
+
# lines to use this authentication method.
|
|
26
|
+
#:default_auth_type: 'Oauth_Authentication_Code_Grant'
|
|
27
|
+
#:oidc_token_endpoint: https://keycloak.example.com/token
|
|
28
|
+
#:oidc_authorization_endpoint: https://keycloak.example.com/auth
|
|
29
|
+
#:oidc_client_id: example-client-id
|
|
30
|
+
#:oidc_redirect_uri: urn:ietf:wg:oauth:2.0:oob
|
|
31
|
+
|
|
12
32
|
# Enable using sessions
|
|
13
33
|
# When sessions are enabled, hammer ignores credentials stored in the config file
|
|
14
34
|
# and asks for them interactively at the begining of each session.
|
data/doc/host_create.md
CHANGED
|
@@ -175,17 +175,16 @@ Provider specific options
|
|
|
175
175
|
Available keys for `--compute-attributes`:
|
|
176
176
|
```
|
|
177
177
|
flavor_id # select one of available flavours
|
|
178
|
-
image_id # select one of available images
|
|
179
178
|
availability_zone
|
|
180
179
|
security_group_ids
|
|
181
180
|
managed_ip
|
|
181
|
+
groups
|
|
182
182
|
```
|
|
183
183
|
|
|
184
184
|
## GCE
|
|
185
185
|
Available keys for `--compute-attributes`:
|
|
186
186
|
```
|
|
187
187
|
machine_type # one of available flavors
|
|
188
|
-
image_id
|
|
189
188
|
network
|
|
190
189
|
associate_external_ip
|
|
191
190
|
```
|
|
@@ -195,6 +194,7 @@ Available keys for `--compute-attributes`:
|
|
|
195
194
|
```
|
|
196
195
|
cpus # number of CPUs
|
|
197
196
|
memory # string, amount of memory, value in bytes
|
|
197
|
+
cpu_mode # possible values: default, host-model, host-passthrough
|
|
198
198
|
start # Must be a 1 or 0, whether to start the machine or not
|
|
199
199
|
```
|
|
200
200
|
|
|
@@ -208,13 +208,16 @@ compute_model # one of [virtio, rtl8139, ne2k_pci, pcnet, e1
|
|
|
208
208
|
Available keys for `--volume`:
|
|
209
209
|
```
|
|
210
210
|
pool_name # list of available storage pools
|
|
211
|
-
capacity # string value,
|
|
211
|
+
capacity # string value, e.g. 10G
|
|
212
212
|
format_type # one of [raw, qcow2]
|
|
213
|
+
allocation # initial allocation, e.g. 0G
|
|
213
214
|
```
|
|
214
215
|
|
|
215
216
|
## OpenStack
|
|
216
217
|
Available keys for `--compute-attributes`:
|
|
217
218
|
```
|
|
219
|
+
availability_zone
|
|
220
|
+
boot_from_volume
|
|
218
221
|
flavor_ref
|
|
219
222
|
image_ref
|
|
220
223
|
tenant_id
|
|
@@ -228,6 +231,7 @@ Available keys for `--compute-attributes`:
|
|
|
228
231
|
cluster
|
|
229
232
|
template # hardware profile to use
|
|
230
233
|
cores # int value, number of cores
|
|
234
|
+
sockets # int value, number of sockets
|
|
231
235
|
memory # amount of memory, int value in bytes
|
|
232
236
|
start # Must be a 1 or 0, whether to start the machine or not
|
|
233
237
|
```
|
|
@@ -236,20 +240,22 @@ Available keys for `--interface`:
|
|
|
236
240
|
```
|
|
237
241
|
compute_name # eg. eth0
|
|
238
242
|
compute_network # select one of available networks for a cluster
|
|
243
|
+
compute_interface # interface type
|
|
239
244
|
```
|
|
240
245
|
|
|
241
246
|
Available keys for `--volume`:
|
|
242
247
|
```
|
|
243
|
-
size_gb
|
|
244
|
-
storage_domain
|
|
245
|
-
bootable
|
|
248
|
+
size_gb # volume size in GB, integer value
|
|
249
|
+
storage_domain # select one of available storage domains
|
|
250
|
+
bootable # boolean, only one volume can be bootable
|
|
251
|
+
preallocate # boolean, set true to preallocate
|
|
252
|
+
wipe_after_delete # boolean, set true to wipe disk after delete
|
|
246
253
|
```
|
|
247
254
|
|
|
248
255
|
## Rackspace
|
|
249
256
|
Available keys for `--compute-attributes`:
|
|
250
257
|
```
|
|
251
258
|
flavor_id
|
|
252
|
-
image_id
|
|
253
259
|
```
|
|
254
260
|
|
|
255
261
|
## VMware
|
|
@@ -263,13 +269,15 @@ cluster Cluster ID from VMware
|
|
|
263
269
|
resource_pool Resource Pool ID from VMware
|
|
264
270
|
path Path to folder
|
|
265
271
|
guest_id Guest OS ID form VMware
|
|
266
|
-
scsi_controller_type ID of the controller from VMware
|
|
267
272
|
hardware_version Hardware version ID from VMware
|
|
268
273
|
add_cdrom Must be a 1 or 0, Add a CD-ROM drive to the virtual machine
|
|
269
274
|
cpuHotAddEnabled Must be a 1 or 0, lets you add memory resources while the machine is on
|
|
270
|
-
memoryHotAddEnabled Must be a 1 or 0, lets you add CPU resources while the machine is on
|
|
271
|
-
start Must be a 1 or 0, whether to start the machine or not
|
|
275
|
+
memoryHotAddEnabled Must be a 1 or 0, lets you add CPU resources while the machine is on the machine or not
|
|
272
276
|
annotation Annotation Notes
|
|
277
|
+
scsi_controllers List with SCSI controllers definitions
|
|
278
|
+
type - ID of the controller from VMware
|
|
279
|
+
key - Key of the controller (e.g. 1000)
|
|
280
|
+
start # Must be a 1 or 0, whether to start the machine or not
|
|
273
281
|
```
|
|
274
282
|
|
|
275
283
|
Available keys for `--interface`:
|
|
@@ -292,4 +300,5 @@ size_gb Integer number, volume size in GB
|
|
|
292
300
|
thin true/false
|
|
293
301
|
eager_zero true/false
|
|
294
302
|
mode persistent/independent_persistent/independent_nonpersistent
|
|
303
|
+
controller_key Associated SCSI controller key
|
|
295
304
|
```
|
data/doc/release_notes.md
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
Release notes
|
|
2
2
|
=============
|
|
3
|
-
### 0.
|
|
4
|
-
* Fix method typo ([PR #450](https://github.com/theforeman/hammer-cli-foreman/pull/450)), [#27868](http://projects.theforeman.org/issues/27868)
|
|
5
|
-
|
|
6
|
-
### 0.18.1 (2019-10-31)
|
|
3
|
+
### 0.19.0 (2019-10-26)
|
|
7
4
|
* Add option to support host's param type ([PR #448](https://github.com/theforeman/hammer-cli-foreman/pull/448)), [#27868](http://projects.theforeman.org/issues/27868)
|
|
5
|
+
* Adding sso func. through cli using openid-connect ([PR #405](https://github.com/theforeman/hammer-cli-foreman/pull/405)), [#25848](http://projects.theforeman.org/issues/25848)
|
|
6
|
+
* Ping command ([PR #394](https://github.com/theforeman/hammer-cli-foreman/pull/394)), [#3036](http://projects.theforeman.org/issues/3036), [#12587](http://projects.theforeman.org/issues/12587), [#3956](http://projects.theforeman.org/issues/3956)
|
|
7
|
+
* Add description field to templates ([PR #449](https://github.com/theforeman/hammer-cli-foreman/pull/449)), [#27997](http://projects.theforeman.org/issues/27997)
|
|
8
|
+
* New lines in text attr dont break output ([PR #415](https://github.com/theforeman/hammer-cli-foreman/pull/415)), [#25878](http://projects.theforeman.org/issues/25878)
|
|
9
|
+
* Fixed inconsistent in output format, [#27597](http://projects.theforeman.org/issues/27597)
|
|
10
|
+
* Added gateway to subnet list, [#27596](http://projects.theforeman.org/issues/27596)
|
|
11
|
+
* Improve help for compute resources, [#25584](http://projects.theforeman.org/issues/25584)
|
|
12
|
+
* Fix interfaces when creating a host ([PR #439](https://github.com/theforeman/hammer-cli-foreman/pull/439)), [#27652](http://projects.theforeman.org/issues/27652)
|
|
13
|
+
* Additional compute resource attrs for ovirt ([PR #440](https://github.com/theforeman/hammer-cli-foreman/pull/440)), [#27554](http://projects.theforeman.org/issues/27554)
|
|
14
|
+
* Change the search fields to search / order fields, [#27602](http://projects.theforeman.org/issues/27602)
|
|
15
|
+
* Update docs for scl ruby to include bundle exec
|
|
8
16
|
|
|
9
17
|
### 0.18.0 (2019-08-01)
|
|
10
18
|
* Report template schedule works with --name ([#27339](http://projects.theforeman.org/issues/27339))
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module HammerCLIForeman
|
|
2
|
+
module Api
|
|
3
|
+
class Authenticator
|
|
4
|
+
attr_accessor :auth_type, :uri, :settings
|
|
5
|
+
def initialize(auth_type, uri, settings)
|
|
6
|
+
@auth_type = auth_type
|
|
7
|
+
@uri = uri
|
|
8
|
+
@settings = settings
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def fetch
|
|
12
|
+
if ssl_cert_authentication? && !use_basic_auth?
|
|
13
|
+
void_auth
|
|
14
|
+
elsif auth_type == AUTH_TYPES[:basic_auth]
|
|
15
|
+
basic_auth
|
|
16
|
+
elsif auth_type == AUTH_TYPES[:oauth_password_grant]
|
|
17
|
+
oauth_password_grant
|
|
18
|
+
elsif auth_type == AUTH_TYPES[:oauth_authentication_code_grant]
|
|
19
|
+
oauth_authentication_code_grant
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def void_auth
|
|
26
|
+
VoidAuth.new(_('Using certificate authentication.'))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def basic_auth
|
|
30
|
+
if HammerCLIForeman::Sessions.enabled?
|
|
31
|
+
authenticator = InteractiveBasicAuth.new(
|
|
32
|
+
settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'],
|
|
33
|
+
settings.get(:_params, :password) || ENV['FOREMAN_PASSWORD']
|
|
34
|
+
)
|
|
35
|
+
SessionAuthenticatorWrapper.new(authenticator, uri, auth_type)
|
|
36
|
+
else
|
|
37
|
+
username = settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'] || settings.get(:foreman, :username)
|
|
38
|
+
password = settings.get(:_params, :password) || ENV['FOREMAN_PASSWORD']
|
|
39
|
+
if password.nil? && (username == settings.get(:foreman, :username))
|
|
40
|
+
password = settings.get(:foreman, :password)
|
|
41
|
+
end
|
|
42
|
+
InteractiveBasicAuth.new(username, password)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def oauth_password_grant
|
|
47
|
+
return unless HammerCLIForeman::Sessions.enabled?
|
|
48
|
+
|
|
49
|
+
authenticator = Oauth::PasswordGrant.new(
|
|
50
|
+
ENV['OIDC_TOKEN_ENDPOINT'] || settings.get(:foreman, :oidc_token_endpoint),
|
|
51
|
+
ENV['OIDC_CLIENT_ID'] || settings.get(:foreman, :oidc_client_id),
|
|
52
|
+
ENV['OIDC_USERNAME'],
|
|
53
|
+
ENV['OIDC_PASSWORD']
|
|
54
|
+
)
|
|
55
|
+
SessionAuthenticatorWrapper.new(authenticator, uri, auth_type)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def oauth_authentication_code_grant
|
|
59
|
+
return unless HammerCLIForeman::Sessions.enabled?
|
|
60
|
+
|
|
61
|
+
authenticator = Oauth::AuthenticationCodeGrant.new(
|
|
62
|
+
ENV['OIDC_TOKEN_ENDPOINT'] || settings.get(:foreman, :oidc_token_endpoint),
|
|
63
|
+
ENV['OIDC_AUTHORIZATION_URL'] || settings.get(:foreman, :oidc_authorization_endpoint),
|
|
64
|
+
ENV['OIDC_CLIENT_ID'] || settings.get(:foreman, :oidc_client_id),
|
|
65
|
+
ENV['OIDC_REDIRECT_URI'] || settings.get(:foreman, :oidc_redirect_uri)
|
|
66
|
+
)
|
|
67
|
+
SessionAuthenticatorWrapper.new(authenticator, uri, auth_type)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def ssl_cert_authentication?
|
|
71
|
+
(settings.get(:_params, :ssl_client_cert) || settings.get(:ssl, :ssl_client_cert)) &&
|
|
72
|
+
(settings.get(:_params, :ssl_client_key) || settings.get(:ssl, :ssl_client_key))
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def use_basic_auth?
|
|
76
|
+
settings.get(:_params, :ssl_with_basic_auth) ||
|
|
77
|
+
settings.get(:ssl, :ssl_with_basic_auth)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
require 'hammer_cli_foreman/api/session_authenticator_wrapper'
|
|
2
|
+
require 'hammer_cli_foreman/api/authenticator'
|
|
2
3
|
require 'hammer_cli_foreman/api/interactive_basic_auth'
|
|
4
|
+
require 'hammer_cli_foreman/api/oauth/authentication_code_grant'
|
|
5
|
+
require 'hammer_cli_foreman/api/oauth/password_grant'
|
|
3
6
|
require 'hammer_cli_foreman/api/void_auth'
|
|
7
|
+
require 'uri'
|
|
4
8
|
|
|
5
9
|
module HammerCLIForeman
|
|
10
|
+
CONNECTION_NAME = 'foreman'
|
|
11
|
+
AUTH_TYPES = {
|
|
12
|
+
basic_auth: 'Basic_Auth',
|
|
13
|
+
oauth_authentication_code_grant: 'Oauth_Authentication_Code_Grant',
|
|
14
|
+
oauth_password_grant: 'Oauth_Password_Grant'
|
|
15
|
+
}.freeze
|
|
16
|
+
|
|
6
17
|
module Api
|
|
7
18
|
class Connection < HammerCLI::Apipie::ApiConnection
|
|
8
19
|
attr_reader :authenticator
|
|
9
20
|
|
|
10
|
-
def initialize(settings, logger = nil, locale = nil)
|
|
11
|
-
|
|
21
|
+
def initialize(settings, logger = nil, locale = nil, auth_type = nil)
|
|
22
|
+
auth_type ||= default_auth_type(settings)
|
|
23
|
+
default_params = build_default_params(settings, logger, locale, auth_type)
|
|
12
24
|
super(default_params,
|
|
13
25
|
:logger => logger,
|
|
14
26
|
:reload_cache => settings.get(:_params, :reload_cache) || settings.get(:reload_cache)
|
|
@@ -16,7 +28,7 @@ module HammerCLIForeman
|
|
|
16
28
|
end
|
|
17
29
|
|
|
18
30
|
def login
|
|
19
|
-
# Call some api entry point to trigger the
|
|
31
|
+
# Call some api entry point to trigger the successful connection
|
|
20
32
|
@api.resource(:home).action(:status).call
|
|
21
33
|
end
|
|
22
34
|
|
|
@@ -30,40 +42,35 @@ module HammerCLIForeman
|
|
|
30
42
|
|
|
31
43
|
protected
|
|
32
44
|
|
|
33
|
-
|
|
34
|
-
|
|
45
|
+
# If the settings in foreman.yml has use_sessions as false, use :basic_auth
|
|
46
|
+
# Else if the settings in foreman.yml has use_sessions as true
|
|
47
|
+
# and if there exists a session_file with valid contents, we use the auth_type from sessions_file
|
|
48
|
+
# Thus if the session expires (indicated by nil session_id), we use the
|
|
49
|
+
# same auth_type for re-authentication as was used by the previous session.
|
|
50
|
+
# Else we use the passed auth_type.
|
|
51
|
+
def default_auth_type(settings)
|
|
52
|
+
return AUTH_TYPES[:basic_auth] unless HammerCLIForeman::Sessions.enabled?
|
|
35
53
|
|
|
36
|
-
|
|
37
|
-
|
|
54
|
+
url = settings.get(:_params, :host) || settings.get(:foreman, :host)
|
|
55
|
+
username = settings.get(:_params, :username) || settings.get(:foreman, :username)
|
|
56
|
+
session = HammerCLIForeman::Sessions.get(url)
|
|
57
|
+
if !session.valid? && session.user_name == username && !session.auth_type.nil?
|
|
58
|
+
session.auth_type
|
|
38
59
|
else
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
)
|
|
44
|
-
@authenticator = SessionAuthenticatorWrapper.new(@authenticator, uri)
|
|
45
|
-
else
|
|
46
|
-
username = settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'] || settings.get(:foreman, :username)
|
|
47
|
-
password = settings.get(:_params, :password) || ENV['FOREMAN_PASSWORD']
|
|
48
|
-
if (password.nil? && (username == settings.get(:foreman, :username)))
|
|
49
|
-
password = settings.get(:foreman, :password)
|
|
50
|
-
end
|
|
51
|
-
@authenticator = InteractiveBasicAuth.new(username, password)
|
|
52
|
-
end
|
|
53
|
-
@authenticator
|
|
60
|
+
# If the caller has not sepcified an 'auth_type'
|
|
61
|
+
# and the 'default_auth_type' in settings is also undefined
|
|
62
|
+
# use :basic_auth for authentication.
|
|
63
|
+
HammerCLI::Settings.get(:foreman, :default_auth_type) || AUTH_TYPES[:basic_auth]
|
|
54
64
|
end
|
|
55
65
|
end
|
|
56
66
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
(settings.get(:_params, :ssl_client_key) || settings.get(:ssl, :ssl_client_key))
|
|
60
|
-
end
|
|
67
|
+
def create_authenticator(uri, settings, auth_type)
|
|
68
|
+
return @authenticator if @authenticator
|
|
61
69
|
|
|
62
|
-
|
|
63
|
-
settings.get(:_params, :ssl_with_basic_auth) || settings.get(:ssl, :ssl_with_basic_auth)
|
|
70
|
+
@authenticator = HammerCLIForeman::Api::Authenticator.new(auth_type, uri, settings).fetch
|
|
64
71
|
end
|
|
65
72
|
|
|
66
|
-
def build_default_params(settings, logger, locale)
|
|
73
|
+
def build_default_params(settings, logger, locale, auth_type)
|
|
67
74
|
config = {}
|
|
68
75
|
config[:uri] = settings.get(:_params, :host) || settings.get(:foreman, :host)
|
|
69
76
|
config[:logger] = logger unless logger.nil?
|
|
@@ -77,22 +84,30 @@ module HammerCLIForeman
|
|
|
77
84
|
config[:timeout] = settings.get(:foreman, :request_timeout)
|
|
78
85
|
config[:timeout] = -1 if (config[:timeout] && config[:timeout].to_i < 0)
|
|
79
86
|
config[:apidoc_authenticated] = false
|
|
80
|
-
config[:authenticator] = create_authenticator(config[:uri], settings)
|
|
87
|
+
config[:authenticator] = create_authenticator(config[:uri], settings, auth_type)
|
|
81
88
|
config
|
|
82
89
|
end
|
|
83
90
|
end
|
|
84
91
|
end
|
|
85
92
|
|
|
86
|
-
CONNECTION_NAME = 'foreman'
|
|
87
|
-
|
|
88
93
|
def self.foreman_api_connection
|
|
89
94
|
HammerCLI.context[:api_connection].create(CONNECTION_NAME) do
|
|
90
95
|
HammerCLIForeman::Api::Connection.new(HammerCLI::Settings, Logging.logger['API'], HammerCLI::I18n.locale)
|
|
91
96
|
end
|
|
92
97
|
end
|
|
93
98
|
|
|
99
|
+
def self.foreman_api_reconnect(auth_type)
|
|
100
|
+
HammerCLI.context[:api_connection].drop(CONNECTION_NAME)
|
|
101
|
+
HammerCLI.context[:api_connection].create(CONNECTION_NAME) do
|
|
102
|
+
HammerCLIForeman::Api::Connection.new(
|
|
103
|
+
HammerCLI::Settings,
|
|
104
|
+
Logging.logger['API'],
|
|
105
|
+
HammerCLI::I18n.locale,
|
|
106
|
+
auth_type)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
94
110
|
def self.init_api_connection
|
|
95
111
|
foreman_api_connection
|
|
96
112
|
end
|
|
97
113
|
end
|
|
98
|
-
|
|
@@ -12,12 +12,12 @@ module HammerCLIForeman
|
|
|
12
12
|
def error(ex)
|
|
13
13
|
if ex.is_a?(RestClient::Unauthorized)
|
|
14
14
|
self.clear
|
|
15
|
-
message = _(
|
|
15
|
+
message = _('Invalid username or password.')
|
|
16
16
|
begin
|
|
17
17
|
message = JSON.parse(ex.response.body)['error']['message']
|
|
18
18
|
rescue
|
|
19
19
|
end
|
|
20
|
-
|
|
20
|
+
UnauthorizedError.new(message)
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'jwt'
|
|
2
|
+
require 'hammer_cli_foreman/openid_connect'
|
|
3
|
+
|
|
4
|
+
module HammerCLIForeman
|
|
5
|
+
module Api
|
|
6
|
+
module Oauth
|
|
7
|
+
class AuthenticationCodeGrant < ApipieBindings::Authenticators::TokenAuth
|
|
8
|
+
attr_accessor :oidc_token_endpoint, :oidc_authorization_endpoint, :oidc_client_id, :token, :oidc_redirect_uri
|
|
9
|
+
|
|
10
|
+
def initialize(oidc_token_endpoint, oidc_authorization_endpoint, oidc_client_id, oidc_redirect_uri)
|
|
11
|
+
@oidc_token_endpoint = oidc_token_endpoint
|
|
12
|
+
@oidc_authorization_endpoint = oidc_authorization_endpoint
|
|
13
|
+
@oidc_client_id = oidc_client_id
|
|
14
|
+
@oidc_redirect_uri = oidc_redirect_uri
|
|
15
|
+
super set_token(oidc_token_endpoint, oidc_authorization_endpoint, oidc_client_id, oidc_redirect_uri)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def authenticate(request, token)
|
|
19
|
+
if HammerCLI.interactive?
|
|
20
|
+
set_token_interactively
|
|
21
|
+
end
|
|
22
|
+
super
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def set_token_interactively
|
|
26
|
+
@token ||= set_token(get_oidc_token_endpoint, get_oidc_authorization_endpoint, get_oidc_client_id, get_oidc_redirect_uri)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def set_token(input_oidc_token_endpoint, input_oidc_authorization_endpoint, input_oidc_client_id, input_oidc_redirect_uri)
|
|
30
|
+
@oidc_token_endpoint = input_oidc_token_endpoint if input_oidc_token_endpoint
|
|
31
|
+
@oidc_authorization_endpoint = input_oidc_authorization_endpoint if input_oidc_authorization_endpoint
|
|
32
|
+
@oidc_client_id = input_oidc_client_id if input_oidc_client_id
|
|
33
|
+
@oidc_redirect_uri = input_oidc_redirect_uri if input_oidc_redirect_uri
|
|
34
|
+
|
|
35
|
+
if @oidc_client_id && @oidc_authorization_endpoint && @oidc_redirect_uri && @oidc_token_endpoint
|
|
36
|
+
get_code
|
|
37
|
+
@token = HammerCLIForeman::OpenidConnect.new(
|
|
38
|
+
@oidc_token_endpoint, @oidc_client_id).get_token_via_2fa(@code, @oidc_redirect_uri)
|
|
39
|
+
else
|
|
40
|
+
@token = nil
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def user
|
|
45
|
+
return nil unless @token
|
|
46
|
+
payload = JWT.decode(@token, nil, false)
|
|
47
|
+
payload.first["preferred_username"]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def error(ex)
|
|
51
|
+
if ex.is_a?(RestClient::InternalServerError)
|
|
52
|
+
@oidc_token_endpoint = @oidc_authorization_endpoint = @oidc_client_id = @oidc_client_id = nil
|
|
53
|
+
original_message = _("Invalid oidc-client-id or oidc-token-endpoint or oidc-authorization-endpoint.\n")
|
|
54
|
+
begin
|
|
55
|
+
message = JSON.parse(ex.response.body)['error']['message']
|
|
56
|
+
rescue
|
|
57
|
+
end
|
|
58
|
+
UnauthorizedError.new(original_message << message)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def get_code
|
|
65
|
+
@token_url = "#{@oidc_authorization_endpoint}?"\
|
|
66
|
+
'response_type=code'\
|
|
67
|
+
"&client_id=#{@oidc_client_id}"\
|
|
68
|
+
"&redirect_uri=#{@oidc_redirect_uri}"\
|
|
69
|
+
'&scope=openid'
|
|
70
|
+
HammerCLI.interactive_output.say("Enter URL in browser: #{@token_url}")
|
|
71
|
+
@code ||= ask_user(_("Code:%s") % " ")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def get_oidc_authorization_endpoint
|
|
75
|
+
@oidc_authorization_endpoint ||= ask_user(_("Openidc Provider Authorization Endpoint:%s") % " ")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def get_oidc_token_endpoint
|
|
79
|
+
@oidc_token_endpoint ||= ask_user(_("Openidc Provider Token Endpoint:%s") % " ")
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def get_oidc_client_id
|
|
83
|
+
@oidc_client_id ||= ask_user(_("Client ID:%s") % " ")
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def get_oidc_redirect_uri
|
|
87
|
+
@oidc_redirect_uri ||= ask_user(_("Redirect URI:%s") % " ")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def ask_user(prompt, silent=false)
|
|
91
|
+
if silent
|
|
92
|
+
HammerCLI.interactive_output.ask(prompt) { |q| q.echo = false }
|
|
93
|
+
else
|
|
94
|
+
HammerCLI.interactive_output.ask(prompt)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'hammer_cli_foreman/openid_connect'
|
|
2
|
+
|
|
3
|
+
module HammerCLIForeman
|
|
4
|
+
module Api
|
|
5
|
+
module Oauth
|
|
6
|
+
class PasswordGrant < ApipieBindings::Authenticators::TokenAuth
|
|
7
|
+
attr_accessor :oidc_token_endpoint, :oidc_client_id, :user, :password, :token
|
|
8
|
+
|
|
9
|
+
def initialize(oidc_token_endpoint, oidc_client_id, user, password)
|
|
10
|
+
@oidc_token_endpoint = oidc_token_endpoint
|
|
11
|
+
@oidc_client_id = oidc_client_id
|
|
12
|
+
@user = user
|
|
13
|
+
@password = password
|
|
14
|
+
super set_token(oidc_token_endpoint, oidc_client_id, user, password)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def authenticate(request, token)
|
|
18
|
+
if HammerCLI.interactive?
|
|
19
|
+
set_token_interactively
|
|
20
|
+
end
|
|
21
|
+
super
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def set_token_interactively
|
|
25
|
+
@token ||= set_token(get_oidc_token_endpoint, get_oidc_client_id, get_user, get_password)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def set_token(input_oidc_token_endpoint, input_oidc_client_id, input_user, input_password)
|
|
29
|
+
@oidc_token_endpoint = input_oidc_token_endpoint if input_oidc_token_endpoint
|
|
30
|
+
@user = input_user
|
|
31
|
+
@password = input_password
|
|
32
|
+
@oidc_client_id = input_oidc_client_id if input_oidc_client_id
|
|
33
|
+
if @user && @password && @oidc_token_endpoint && @oidc_client_id
|
|
34
|
+
@token = HammerCLIForeman::OpenidConnect.new(
|
|
35
|
+
@oidc_token_endpoint, @oidc_client_id).get_token(@user, @password)
|
|
36
|
+
else
|
|
37
|
+
@token = nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def error(ex)
|
|
42
|
+
if ex.is_a?(RestClient::InternalServerError)
|
|
43
|
+
@user = @password = @oidc_token_endpoint = @oidc_client_id = nil
|
|
44
|
+
original_message = _("Invalid credentials or oidc-client-id or oidc-token-endpoint.\n")
|
|
45
|
+
begin
|
|
46
|
+
message = JSON.parse(ex.response.body)['error']['message']
|
|
47
|
+
rescue
|
|
48
|
+
end
|
|
49
|
+
UnauthorizedError.new(original_message << message)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def get_user
|
|
56
|
+
@user ||= ask_user(_("Username:%s") % " ")
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def get_password
|
|
60
|
+
@password ||= ask_user(_("Password:%{wsp}") % {:wsp => " "}, true)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def get_oidc_token_endpoint
|
|
64
|
+
@oidc_token_endpoint ||= ask_user(_("Openidc Provider Token Endpoint:%s") % " ")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def get_oidc_client_id
|
|
68
|
+
@oidc_client_id ||= ask_user(_("Client ID:%s") % " ")
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ask_user(prompt, silent=false)
|
|
72
|
+
if silent
|
|
73
|
+
HammerCLI.interactive_output.ask(prompt) { |q| q.echo = false }
|
|
74
|
+
else
|
|
75
|
+
HammerCLI.interactive_output.ask(prompt)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|