hammer_cli_foreman 0.18.2 → 0.19.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|