foreman_puppet 4.0.0 → 4.0.3
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/README.md +2 -1
- data/db/migrate/20220208135305_migrate_environment_ignore_type.foreman_puppet.rb +2 -1
- data/lib/foreman_puppet/engine.rb +1 -0
- data/lib/foreman_puppet/register.rb +2 -1
- data/lib/foreman_puppet/version.rb +1 -1
- data/webpack/src/Extends/Host/PuppetTab/Routes.js +12 -8
- data/webpack/src/Extends/Host/PuppetTab/SubTabs/ENCPreview/ENCTab.js +61 -0
- data/webpack/src/Extends/Host/PuppetTab/SubTabs/ENCPreview/index.js +56 -0
- data/webpack/src/Extends/Host/PuppetTab/SubTabs/EmptyPage.js +7 -6
- data/webpack/src/Extends/Host/PuppetTab/SubTabs/Reports/components/DescriptionCard.js +23 -6
- data/webpack/src/Extends/Host/PuppetTab/SubTabs/Reports/index.js +6 -1
- data/webpack/src/Extends/Host/PuppetTab/constants.js +1 -1
- metadata +51 -50
- data/locale/en/foreman_puppet.edit.po +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 796b143175fddce006bbbca2b1cc835e53ef870b5efe03ace7d4826c7cf7a1da
         | 
| 4 | 
            +
              data.tar.gz: 69dc252763e2625dbd25f6099b5474eea4ca566fa5a1b5161b780ff9c12b3b45
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bd64ee2f2f476cb19ec7bff88069d74a273ff7ba4035581ae197fda484f9fd42b9361fb5e1bade978201123b43ed09336e795af17455e44d5817fcf6570eedaa
         | 
| 7 | 
            +
              data.tar.gz: 1ea07c0fd65f7b9d5a14ef2c8b4d6bd3b7c16ea1bc48edad123ba7acd5493891b879ad80ecf7fa8b40242c4114fdf48a4b1c8c9e6091928b8e286cfd90838609
         | 
    
        data/README.md
    CHANGED
    
    | @@ -37,6 +37,7 @@ You can install it on Foreman 2.5 to prepare for the Foreman update. | |
| 37 37 |  | 
| 38 38 | 
             
            |Foreman version|Plugin version|Notes                                     |
         | 
| 39 39 | 
             
            |---------------|--------------|------------------------------------------|
         | 
| 40 | 
            +
            | >= 3.3        | ~> 4.0       | Required                                 |
         | 
| 40 41 | 
             
            | >= 3.2        | ~> 3.0       | Required                                 |
         | 
| 41 42 | 
             
            | ~> 3.1        | ~> 2.0       | Required                                 |
         | 
| 42 43 | 
             
            | ~> 3.0        | ~> 1.0       | Required                                 |
         | 
| @@ -78,7 +79,7 @@ Fork and send a Pull Request. Thanks! | |
| 78 79 |  | 
| 79 80 | 
             
            ## Copyright
         | 
| 80 81 |  | 
| 81 | 
            -
            Copyright (c) * | 
| 82 | 
            +
            Copyright (c) *2022* *The Foreman developers*
         | 
| 82 83 |  | 
| 83 84 | 
             
            This program is free software: you can redistribute it and/or modify
         | 
| 84 85 | 
             
            it under the terms of the GNU General Public License as published by
         | 
| @@ -7,7 +7,8 @@ class MigrateEnvironmentIgnoreType < ActiveRecord::Migration[6.0] | |
| 7 7 | 
             
                  new_types = tax.ignore_types.reject { |type| type == 'Environment' }
         | 
| 8 8 | 
             
                  tax.update_columns(ignore_types: new_types)
         | 
| 9 9 | 
             
                  taxable_rows = environment_ids.map do |env_id|
         | 
| 10 | 
            -
                    { taxable_id: env_id, taxable_type: 'ForemanPuppet::Environment', taxonomy_id: tax.id }
         | 
| 10 | 
            +
                    data = { taxable_id: env_id, taxable_type: 'ForemanPuppet::Environment', taxonomy_id: tax.id }
         | 
| 11 | 
            +
                    TaxableTaxonomy.column_names.include?('created_at') ? data.merge({ created_at: Time.zone.now, updated_at: Time.zone.now }) : data
         | 
| 11 12 | 
             
                  end
         | 
| 12 13 | 
             
                  TaxableTaxonomy.insert_all(taxable_rows) if taxable_rows.any?
         | 
| 13 14 | 
             
                end
         | 
| @@ -58,6 +58,7 @@ module ForemanPuppet | |
| 58 58 | 
             
                  ::Api::V2::TemplateCombinationsController.include ForemanPuppet::Extensions::ApiTemplateCombinationsController
         | 
| 59 59 | 
             
                  ::Api::V2::HostsController.include ForemanPuppet::Extensions::ParametersHost
         | 
| 60 60 | 
             
                  ::Api::V2::HostgroupsController.include ForemanPuppet::Extensions::ParametersHostgroup
         | 
| 61 | 
            +
                  ::ComputeResourcesVmsController.helper ForemanPuppet::HostsAndHostgroupsHelper
         | 
| 61 62 | 
             
                  ::OperatingsystemsController.prepend ForemanPuppet::Extensions::OperatingsystemsController
         | 
| 62 63 | 
             
                  ::HostsController.include ForemanPuppet::Extensions::HostsControllerExtensions
         | 
| 63 64 | 
             
                  ::HostsController.include ForemanPuppet::Extensions::ParametersHost
         | 
| @@ -145,7 +145,8 @@ Foreman::Plugin.register :foreman_puppet do | |
| 145 145 | 
             
                                                     'foreman_puppet/api/v2/puppetclasses' => [:destroy] },
         | 
| 146 146 | 
             
                  resource_type: 'ForemanPuppet::Puppetclass'
         | 
| 147 147 | 
             
                permission :import_puppetclasses, { 'foreman_puppet/puppetclasses' => %i[import_environments obsolete_and_new],
         | 
| 148 | 
            -
                                                    'foreman_puppet/api/v2/environments' => [:import_puppetclasses] | 
| 148 | 
            +
                                                    'foreman_puppet/api/v2/environments' => [:import_puppetclasses],
         | 
| 149 | 
            +
                                                    'api/v2/smart_proxies' => [:import_puppetclasses] },
         | 
| 149 150 | 
             
                  resource_type: 'ForemanPuppet::Puppetclass'
         | 
| 150 151 | 
             
                permission :edit_classes, { :host_editing => [:edit_classes],
         | 
| 151 152 | 
             
                                            'foreman_puppet/api/v2/host_classes' => %i[index create destroy] },
         | 
| @@ -1,27 +1,31 @@ | |
| 1 1 | 
             
            import PropTypes from 'prop-types';
         | 
| 2 2 | 
             
            import React from 'react';
         | 
| 3 3 | 
             
            import { Route, Switch, Redirect } from 'react-router-dom';
         | 
| 4 | 
            +
            import { translate as __ } from 'foremanReact/common/I18n';
         | 
| 4 5 | 
             
            import { route } from './helpers';
         | 
| 5 6 | 
             
            import EmptyPage from './SubTabs/EmptyPage';
         | 
| 6 7 | 
             
            import Reports from './SubTabs/Reports';
         | 
| 8 | 
            +
            import ENCPreview from './SubTabs/ENCPreview';
         | 
| 7 9 |  | 
| 8 10 | 
             
            const SecondaryTabRoutes = ({ hostName, hostInfo, status }) => (
         | 
| 9 11 | 
             
              <Switch>
         | 
| 10 12 | 
             
                <Route path={route('reports')}>
         | 
| 11 | 
            -
                  {hostName  | 
| 12 | 
            -
                    <Reports hostName={hostName} hostInfo={hostInfo} status={status} />
         | 
| 13 | 
            -
                  ) : (
         | 
| 14 | 
            -
                    <EmptyPage header="Reports" />
         | 
| 15 | 
            -
                  )}
         | 
| 13 | 
            +
                  <Reports hostName={hostName} hostInfo={hostInfo} status={status} />
         | 
| 16 14 | 
             
                </Route>
         | 
| 17 15 | 
             
                <Route path={route('assigned')}>
         | 
| 18 | 
            -
                  <EmptyPage | 
| 16 | 
            +
                  <EmptyPage
         | 
| 17 | 
            +
                    header={__('Assigned classes')}
         | 
| 18 | 
            +
                    description={__('This tab is still a work in progress')}
         | 
| 19 | 
            +
                  />
         | 
| 19 20 | 
             
                </Route>
         | 
| 20 21 | 
             
                <Route path={route('smart-classes')}>
         | 
| 21 | 
            -
                  <EmptyPage | 
| 22 | 
            +
                  <EmptyPage
         | 
| 23 | 
            +
                    header={__('Smart class parameters')}
         | 
| 24 | 
            +
                    description={__('This tab is still a work in progress')}
         | 
| 25 | 
            +
                  />
         | 
| 22 26 | 
             
                </Route>
         | 
| 23 27 | 
             
                <Route path={route('yaml')}>
         | 
| 24 | 
            -
                  < | 
| 28 | 
            +
                  <ENCPreview hostName={hostName} />
         | 
| 25 29 | 
             
                </Route>
         | 
| 26 30 | 
             
                <Redirect to={route('reports')} />
         | 
| 27 31 | 
             
              </Switch>
         | 
| @@ -0,0 +1,61 @@ | |
| 1 | 
            +
            import React from 'react';
         | 
| 2 | 
            +
            import PropTypes from 'prop-types';
         | 
| 3 | 
            +
            import {
         | 
| 4 | 
            +
              CodeBlock,
         | 
| 5 | 
            +
              CodeBlockAction,
         | 
| 6 | 
            +
              CodeBlockCode,
         | 
| 7 | 
            +
              ClipboardCopyButton,
         | 
| 8 | 
            +
            } from '@patternfly/react-core';
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            export const ENCTab = ({ encData }) => {
         | 
| 11 | 
            +
              const [copied, setCopied] = React.useState(false);
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              const code = `${encData}`;
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              const clipboardCopyFunc = (event, text) => {
         | 
| 16 | 
            +
                const clipboard = event.currentTarget.parentElement;
         | 
| 17 | 
            +
                const el = document.createElement('textarea');
         | 
| 18 | 
            +
                el.value = text.toString();
         | 
| 19 | 
            +
                clipboard.appendChild(el);
         | 
| 20 | 
            +
                el.select();
         | 
| 21 | 
            +
                document.execCommand('copy');
         | 
| 22 | 
            +
                clipboard.removeChild(el);
         | 
| 23 | 
            +
              };
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              const onClick = (event, text) => {
         | 
| 26 | 
            +
                clipboardCopyFunc(event, text);
         | 
| 27 | 
            +
                setCopied(true);
         | 
| 28 | 
            +
              };
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              const actions = (
         | 
| 31 | 
            +
                <CodeBlockAction>
         | 
| 32 | 
            +
                  <ClipboardCopyButton
         | 
| 33 | 
            +
                    id="copy-button"
         | 
| 34 | 
            +
                    textId="code-content"
         | 
| 35 | 
            +
                    aria-label="Copy to clipboard"
         | 
| 36 | 
            +
                    onClick={e => onClick(e, code)}
         | 
| 37 | 
            +
                    exitDelay={600}
         | 
| 38 | 
            +
                    maxWidth="110px"
         | 
| 39 | 
            +
                    variant="plain"
         | 
| 40 | 
            +
                  >
         | 
| 41 | 
            +
                    {copied ? 'Successfully copied to clipboard!' : 'Copy to clipboard'}
         | 
| 42 | 
            +
                  </ClipboardCopyButton>
         | 
| 43 | 
            +
                </CodeBlockAction>
         | 
| 44 | 
            +
              );
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              return (
         | 
| 47 | 
            +
                <CodeBlock actions={actions}>
         | 
| 48 | 
            +
                  <CodeBlockCode id="code-content">{code}</CodeBlockCode>
         | 
| 49 | 
            +
                </CodeBlock>
         | 
| 50 | 
            +
              );
         | 
| 51 | 
            +
            };
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            ENCTab.propTypes = {
         | 
| 54 | 
            +
              encData: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
         | 
| 55 | 
            +
            };
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            ENCTab.defaultProps = {
         | 
| 58 | 
            +
              encData: undefined,
         | 
| 59 | 
            +
            };
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            export default ENCTab;
         | 
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
            import React from 'react';
         | 
| 2 | 
            +
            import { useAPI } from 'foremanReact/common/hooks/API/APIHooks';
         | 
| 3 | 
            +
            import PropTypes from 'prop-types';
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            import Skeleton from 'react-loading-skeleton';
         | 
| 6 | 
            +
            import EmptyState from 'foremanReact/components/common/EmptyState/EmptyStatePattern';
         | 
| 7 | 
            +
            import { STATUS } from 'foremanReact/constants';
         | 
| 8 | 
            +
            import { EmptyStateIcon } from '@patternfly/react-core';
         | 
| 9 | 
            +
            import { ExclamationCircleIcon } from '@patternfly/react-icons';
         | 
| 10 | 
            +
            import { global_danger_color_200 as dangerColor } from '@patternfly/react-tokens';
         | 
| 11 | 
            +
            import { translate as __ } from 'foremanReact/common/I18n';
         | 
| 12 | 
            +
            import { ENCTab } from './ENCTab';
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            const ENCPreview = ({ hostName }) => {
         | 
| 15 | 
            +
              const options = {
         | 
| 16 | 
            +
                params: { name: hostName, format: 'yml' },
         | 
| 17 | 
            +
                key: 'PUPPET_ENC_PREVIEW',
         | 
| 18 | 
            +
              };
         | 
| 19 | 
            +
              const url = `${window.location.origin.toString()}/foreman_puppet/hosts/${hostName}/externalNodes`;
         | 
| 20 | 
            +
              const { response, status } = useAPI('get', url, options);
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              if (status === STATUS.PENDING) {
         | 
| 23 | 
            +
                return <Skeleton count={5} />;
         | 
| 24 | 
            +
              }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              if (status === STATUS.ERROR || !hostName) {
         | 
| 27 | 
            +
                const description = !hostName
         | 
| 28 | 
            +
                  ? __("Couldn't find any ENC data for this host")
         | 
| 29 | 
            +
                  : response?.response?.data?.message;
         | 
| 30 | 
            +
                const icon = (
         | 
| 31 | 
            +
                  <EmptyStateIcon icon={ExclamationCircleIcon} color={dangerColor.value} />
         | 
| 32 | 
            +
                );
         | 
| 33 | 
            +
                return (
         | 
| 34 | 
            +
                  <EmptyState header={__('Error!')} icon={icon} description={description} />
         | 
| 35 | 
            +
                );
         | 
| 36 | 
            +
              }
         | 
| 37 | 
            +
              if (response !== '' || response !== undefined) {
         | 
| 38 | 
            +
                return (
         | 
| 39 | 
            +
                  <div className="enc-preview-tab" padding="16px 24px">
         | 
| 40 | 
            +
                    <ENCTab encData={response} />
         | 
| 41 | 
            +
                  </div>
         | 
| 42 | 
            +
                );
         | 
| 43 | 
            +
              }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              return null;
         | 
| 46 | 
            +
            };
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            ENCPreview.propTypes = {
         | 
| 49 | 
            +
              hostName: PropTypes.string,
         | 
| 50 | 
            +
            };
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            ENCPreview.defaultProps = {
         | 
| 53 | 
            +
              hostName: undefined,
         | 
| 54 | 
            +
            };
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            export default ENCPreview;
         | 
| @@ -2,18 +2,19 @@ import React from 'react'; | |
| 2 2 | 
             
            import PropTypes from 'prop-types';
         | 
| 3 3 | 
             
            import PFEmptyPage from 'foremanReact/components/common/EmptyState/EmptyStatePattern';
         | 
| 4 4 |  | 
| 5 | 
            -
            const EmptyPage = ({ header }) => (
         | 
| 5 | 
            +
            const EmptyPage = ({ header, description }) => (
         | 
| 6 6 | 
             
              <div className="host-details-tab-item">
         | 
| 7 | 
            -
                <PFEmptyPage
         | 
| 8 | 
            -
                  icon="enterprise"
         | 
| 9 | 
            -
                  header={header}
         | 
| 10 | 
            -
                  description="This is a demo for adding content to the new host page"
         | 
| 11 | 
            -
                />
         | 
| 7 | 
            +
                <PFEmptyPage icon="enterprise" header={header} description={description} />
         | 
| 12 8 | 
             
              </div>
         | 
| 13 9 | 
             
            );
         | 
| 14 10 |  | 
| 15 11 | 
             
            EmptyPage.propTypes = {
         | 
| 16 12 | 
             
              header: PropTypes.string.isRequired,
         | 
| 13 | 
            +
              description: PropTypes.string,
         | 
| 14 | 
            +
            };
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            EmptyPage.defaultProps = {
         | 
| 17 | 
            +
              description: null,
         | 
| 17 18 | 
             
            };
         | 
| 18 19 |  | 
| 19 20 | 
             
            export default EmptyPage;
         | 
| @@ -12,7 +12,14 @@ import DefaultLoaderEmptyState from 'foremanReact/components/HostDetails/Details | |
| 12 12 | 
             
            import { STATUS } from 'foremanReact/constants';
         | 
| 13 13 | 
             
            import { translate as __ } from 'foremanReact/common/I18n';
         | 
| 14 14 |  | 
| 15 | 
            -
            const DescriptionCard = ({ | 
| 15 | 
            +
            const DescriptionCard = ({
         | 
| 16 | 
            +
              proxyName,
         | 
| 17 | 
            +
              caProxy,
         | 
| 18 | 
            +
              proxyId,
         | 
| 19 | 
            +
              caProxyId,
         | 
| 20 | 
            +
              env,
         | 
| 21 | 
            +
              status,
         | 
| 22 | 
            +
            }) => (
         | 
| 16 23 | 
             
              <CardTemplate header={__('Puppet details')} expandable>
         | 
| 17 24 | 
             
                <DescriptionList isCompact>
         | 
| 18 25 | 
             
                  <DescriptionListGroup>
         | 
| @@ -23,30 +30,36 @@ const DescriptionCard = ({ proxyName, caProxy, env, status }) => ( | |
| 23 30 | 
             
                        status={status}
         | 
| 24 31 | 
             
                      >
         | 
| 25 32 | 
             
                        {env && (
         | 
| 26 | 
            -
                          <a href={`/foreman_puppet/environments | 
| 33 | 
            +
                          <a href={`/foreman_puppet/environments/?search=name+%3D+${env}`}>
         | 
| 34 | 
            +
                            {env}
         | 
| 35 | 
            +
                          </a>
         | 
| 27 36 | 
             
                        )}
         | 
| 28 37 | 
             
                      </SkeletonLoader>
         | 
| 29 38 | 
             
                    </DescriptionListDescription>
         | 
| 30 39 | 
             
                  </DescriptionListGroup>
         | 
| 31 40 | 
             
                  <DescriptionListGroup>
         | 
| 32 | 
            -
                    <DescriptionListTerm>{__('Puppet  | 
| 41 | 
            +
                    <DescriptionListTerm>{__('Puppet Smart Proxy')}</DescriptionListTerm>
         | 
| 33 42 | 
             
                    <DescriptionListDescription>
         | 
| 34 43 | 
             
                      <SkeletonLoader
         | 
| 35 44 | 
             
                        emptyState={<DefaultLoaderEmptyState />}
         | 
| 36 45 | 
             
                        status={status}
         | 
| 37 46 | 
             
                      >
         | 
| 38 | 
            -
                        {proxyName | 
| 47 | 
            +
                        {proxyName && (
         | 
| 48 | 
            +
                          <a href={`/smart_proxies/${proxyId}#puppet`}>{proxyName}</a>
         | 
| 49 | 
            +
                        )}
         | 
| 39 50 | 
             
                      </SkeletonLoader>
         | 
| 40 51 | 
             
                    </DescriptionListDescription>
         | 
| 41 52 | 
             
                  </DescriptionListGroup>
         | 
| 42 53 | 
             
                  <DescriptionListGroup>
         | 
| 43 | 
            -
                    <DescriptionListTerm>{__('Puppet  | 
| 54 | 
            +
                    <DescriptionListTerm>{__('Puppet CA Smart Proxy')}</DescriptionListTerm>
         | 
| 44 55 | 
             
                    <DescriptionListDescription>
         | 
| 45 56 | 
             
                      <SkeletonLoader
         | 
| 46 57 | 
             
                        emptyState={<DefaultLoaderEmptyState />}
         | 
| 47 58 | 
             
                        status={status}
         | 
| 48 59 | 
             
                      >
         | 
| 49 | 
            -
                        {caProxy | 
| 60 | 
            +
                        {caProxy && (
         | 
| 61 | 
            +
                          <a href={`/smart_proxies/${caProxyId}#puppet-ca`}>{caProxy}</a>
         | 
| 62 | 
            +
                        )}
         | 
| 50 63 | 
             
                      </SkeletonLoader>
         | 
| 51 64 | 
             
                    </DescriptionListDescription>
         | 
| 52 65 | 
             
                  </DescriptionListGroup>
         | 
| @@ -56,14 +69,18 @@ const DescriptionCard = ({ proxyName, caProxy, env, status }) => ( | |
| 56 69 |  | 
| 57 70 | 
             
            DescriptionCard.propTypes = {
         | 
| 58 71 | 
             
              caProxy: PropTypes.string,
         | 
| 72 | 
            +
              caProxyId: PropTypes.number,
         | 
| 59 73 | 
             
              env: PropTypes.string,
         | 
| 74 | 
            +
              proxyId: PropTypes.number,
         | 
| 60 75 | 
             
              proxyName: PropTypes.string,
         | 
| 61 76 | 
             
              status: PropTypes.string,
         | 
| 62 77 | 
             
            };
         | 
| 63 78 |  | 
| 64 79 | 
             
            DescriptionCard.defaultProps = {
         | 
| 65 80 | 
             
              caProxy: undefined,
         | 
| 81 | 
            +
              caProxyId: undefined,
         | 
| 66 82 | 
             
              env: undefined,
         | 
| 83 | 
            +
              proxyId: undefined,
         | 
| 67 84 | 
             
              proxyName: undefined,
         | 
| 68 85 | 
             
              status: STATUS.PENDING,
         | 
| 69 86 | 
             
            };
         | 
| @@ -12,6 +12,8 @@ const Reports = ({ | |
| 12 12 | 
             
                puppet_proxy_name: proxyName,
         | 
| 13 13 | 
             
                puppet_ca_proxy_name: caProxy,
         | 
| 14 14 | 
             
                environment_name: env,
         | 
| 15 | 
            +
                puppet_proxy_id: proxyId,
         | 
| 16 | 
            +
                puppet_ca_proxy_id: caProxyId,
         | 
| 15 17 | 
             
              },
         | 
| 16 18 | 
             
            }) => (
         | 
| 17 19 | 
             
              <div className="report-tab">
         | 
| @@ -20,6 +22,8 @@ const Reports = ({ | |
| 20 22 | 
             
                    <DescriptionCard
         | 
| 21 23 | 
             
                      proxyName={proxyName}
         | 
| 22 24 | 
             
                      caProxy={caProxy}
         | 
| 25 | 
            +
                      proxyId={proxyId}
         | 
| 26 | 
            +
                      caProxyId={caProxyId}
         | 
| 23 27 | 
             
                      env={env}
         | 
| 24 28 | 
             
                      status={status}
         | 
| 25 29 | 
             
                    />
         | 
| @@ -32,12 +36,13 @@ const Reports = ({ | |
| 32 36 | 
             
            );
         | 
| 33 37 |  | 
| 34 38 | 
             
            Reports.propTypes = {
         | 
| 35 | 
            -
              hostName: PropTypes.string | 
| 39 | 
            +
              hostName: PropTypes.string,
         | 
| 36 40 | 
             
              hostInfo: PropTypes.object,
         | 
| 37 41 | 
             
              status: PropTypes.string,
         | 
| 38 42 | 
             
            };
         | 
| 39 43 |  | 
| 40 44 | 
             
            Reports.defaultProps = {
         | 
| 45 | 
            +
              hostName: undefined,
         | 
| 41 46 | 
             
              hostInfo: {},
         | 
| 42 47 | 
             
              status: undefined,
         | 
| 43 48 | 
             
            };
         | 
| @@ -4,5 +4,5 @@ export const SECONDARY_TABS = [ | |
| 4 4 | 
             
              { key: 'reports', title: __('Reports') },
         | 
| 5 5 | 
             
              { key: 'assigned', title: __('Assigned classes') },
         | 
| 6 6 | 
             
              { key: 'smart-classes', title: __('Smart class parameters') },
         | 
| 7 | 
            -
              { key: 'yaml', title: __(' | 
| 7 | 
            +
              { key: 'yaml', title: __('ENC Preview') },
         | 
| 8 8 | 
             
            ];
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: foreman_puppet
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4.0. | 
| 4 | 
            +
              version: 4.0.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ondřej Ezr
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2022- | 
| 12 | 
            +
            date: 2022-08-31 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: Allow assigning Puppet environments and classes to the Foreman Hosts.
         | 
| 15 15 | 
             
            email:
         | 
| @@ -224,7 +224,6 @@ files: | |
| 224 224 | 
             
            - locale/de/LC_MESSAGES/foreman_puppet.mo
         | 
| 225 225 | 
             
            - locale/de/foreman_puppet.po
         | 
| 226 226 | 
             
            - locale/en/LC_MESSAGES/foreman_puppet.mo
         | 
| 227 | 
            -
            - locale/en/foreman_puppet.edit.po
         | 
| 228 227 | 
             
            - locale/en/foreman_puppet.po
         | 
| 229 228 | 
             
            - locale/en_GB/LC_MESSAGES/foreman_puppet.mo
         | 
| 230 229 | 
             
            - locale/en_GB/foreman_puppet.po
         | 
| @@ -338,6 +337,8 @@ files: | |
| 338 337 | 
             
            - webpack/src/Components/Environments/Welcome.js
         | 
| 339 338 | 
             
            - webpack/src/Extends/Fills/index.js
         | 
| 340 339 | 
             
            - webpack/src/Extends/Host/PuppetTab/Routes.js
         | 
| 340 | 
            +
            - webpack/src/Extends/Host/PuppetTab/SubTabs/ENCPreview/ENCTab.js
         | 
| 341 | 
            +
            - webpack/src/Extends/Host/PuppetTab/SubTabs/ENCPreview/index.js
         | 
| 341 342 | 
             
            - webpack/src/Extends/Host/PuppetTab/SubTabs/EmptyPage.js
         | 
| 342 343 | 
             
            - webpack/src/Extends/Host/PuppetTab/SubTabs/Reports/components/DescriptionCard.js
         | 
| 343 344 | 
             
            - webpack/src/Extends/Host/PuppetTab/SubTabs/Reports/index.js
         | 
| @@ -379,70 +380,70 @@ signing_key: | |
| 379 380 | 
             
            specification_version: 4
         | 
| 380 381 | 
             
            summary: Add Puppet features to Foreman
         | 
| 381 382 | 
             
            test_files:
         | 
| 382 | 
            -
            - test/ | 
| 383 | 
            -
            - test/unit/foreman_puppet/puppet_class_importer_test.rb
         | 
| 384 | 
            -
            - test/unit/foreman_puppet/template_rendering_test.rb
         | 
| 385 | 
            -
            - test/unit/foreman_puppet/access_permissions_test.rb
         | 
| 386 | 
            -
            - test/helpers/foreman_puppet/puppetclass_lookup_keys_helper_test.rb
         | 
| 387 | 
            -
            - test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb
         | 
| 388 | 
            -
            - test/helpers/foreman_puppet/puppetclasses_helper_test.rb
         | 
| 389 | 
            -
            - test/integration/foreman_puppet/dashboard_js_test.rb
         | 
| 390 | 
            -
            - test/integration/foreman_puppet/host_js_test.rb
         | 
| 391 | 
            -
            - test/integration/foreman_puppet/hostgroup_js_test.rb
         | 
| 392 | 
            -
            - test/integration/foreman_puppet/smartclass_parameter_js_test.rb
         | 
| 393 | 
            -
            - test/integration/foreman_puppet/puppetclass_js_test.rb
         | 
| 394 | 
            -
            - test/integration/foreman_puppet/environment_js_test.rb
         | 
| 395 | 
            -
            - test/factories/foreman_puppet_factories.rb
         | 
| 396 | 
            -
            - test/factories/host_puppet_enhancements.rb
         | 
| 397 | 
            -
            - test/factories/proxy_puppet_enhancements.rb
         | 
| 398 | 
            -
            - test/integration_puppet_helper.rb
         | 
| 399 | 
            -
            - test/models/foreman_puppet/config_group_test.rb
         | 
| 383 | 
            +
            - test/test_puppet_helper.rb
         | 
| 400 384 | 
             
            - test/models/foreman_puppet/report_test.rb
         | 
| 401 | 
            -
            - test/models/foreman_puppet/host_puppet_facet_test.rb
         | 
| 402 385 | 
             
            - test/models/foreman_puppet/host_test.rb
         | 
| 386 | 
            +
            - test/models/foreman_puppet/smart_proxy_test.rb
         | 
| 403 387 | 
             
            - test/models/foreman_puppet/user_test.rb
         | 
| 404 | 
            -
            - test/models/foreman_puppet/ | 
| 388 | 
            +
            - test/models/foreman_puppet/config_group_class_test.rb
         | 
| 389 | 
            +
            - test/models/foreman_puppet/config_group_test.rb
         | 
| 390 | 
            +
            - test/models/foreman_puppet/host_puppet_facet_test.rb
         | 
| 405 391 | 
             
            - test/models/foreman_puppet/host_config_group_test.rb
         | 
| 392 | 
            +
            - test/models/foreman_puppet/puppetclass_test.rb
         | 
| 393 | 
            +
            - test/models/foreman_puppet/provisioning_template_test.rb
         | 
| 406 394 | 
             
            - test/models/foreman_puppet/lookup_value_test.rb
         | 
| 407 | 
            -
            - test/models/foreman_puppet/hostgroup_test.rb
         | 
| 408 | 
            -
            - test/models/foreman_puppet/hostgroup_puppet_facet_test.rb
         | 
| 409 395 | 
             
            - test/models/foreman_puppet/puppetclass_lookup_key_test.rb
         | 
| 396 | 
            +
            - test/models/foreman_puppet/hostgroup_puppet_facet_test.rb
         | 
| 410 397 | 
             
            - test/models/foreman_puppet/environment_test.rb
         | 
| 411 | 
            -
            - test/models/foreman_puppet/ | 
| 412 | 
            -
            - test/ | 
| 413 | 
            -
            - test/ | 
| 414 | 
            -
            - test/ | 
| 415 | 
            -
            - test/ | 
| 398 | 
            +
            - test/models/foreman_puppet/hostgroup_test.rb
         | 
| 399 | 
            +
            - test/services/foreman_puppet/host_counter_test.rb
         | 
| 400 | 
            +
            - test/services/foreman_puppet/host_info_providers/config_groups_info_test.rb
         | 
| 401 | 
            +
            - test/services/foreman_puppet/host_info_providers/puppet_info_test.rb
         | 
| 402 | 
            +
            - test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb
         | 
| 403 | 
            +
            - test/factories/foreman_puppet_factories.rb
         | 
| 404 | 
            +
            - test/factories/host_puppet_enhancements.rb
         | 
| 405 | 
            +
            - test/factories/proxy_puppet_enhancements.rb
         | 
| 406 | 
            +
            - test/unit/foreman_puppet/access_permissions_test.rb
         | 
| 407 | 
            +
            - test/unit/foreman_puppet/template_rendering_test.rb
         | 
| 408 | 
            +
            - test/unit/foreman_puppet/puppet_class_importer_test.rb
         | 
| 409 | 
            +
            - test/unit/foreman_puppet_test.rb
         | 
| 410 | 
            +
            - test/graphql/mutations/hosts/create_mutation_test.rb
         | 
| 411 | 
            +
            - test/graphql/queries/environments_query_test.rb
         | 
| 416 412 | 
             
            - test/graphql/queries/location_query_test.rb
         | 
| 413 | 
            +
            - test/graphql/queries/puppetclass_query_test.rb
         | 
| 417 414 | 
             
            - test/graphql/queries/organization_query_test.rb
         | 
| 418 | 
            -
            - test/graphql/queries/puppetclasses_query_test.rb
         | 
| 419 | 
            -
            - test/graphql/queries/environment_query_test.rb
         | 
| 420 | 
            -
            - test/graphql/queries/environments_query_test.rb
         | 
| 421 415 | 
             
            - test/graphql/queries/host_puppet_query_test.rb
         | 
| 422 | 
            -
            - test/graphql/ | 
| 423 | 
            -
            - test/ | 
| 424 | 
            -
            - test/ | 
| 416 | 
            +
            - test/graphql/queries/environment_query_test.rb
         | 
| 417 | 
            +
            - test/graphql/queries/puppetclasses_query_test.rb
         | 
| 418 | 
            +
            - test/graphql/queries/hostgroup_puppet_query_test.rb
         | 
| 425 419 | 
             
            - test/controllers/foreman_puppet/hostgroups_controller_test.rb
         | 
| 420 | 
            +
            - test/controllers/foreman_puppet/config_groups_controller_test.rb
         | 
| 426 421 | 
             
            - test/controllers/foreman_puppet/puppetclass_lookup_keys_controller_test.rb
         | 
| 427 422 | 
             
            - test/controllers/foreman_puppet/environments_controller_test.rb
         | 
| 428 423 | 
             
            - test/controllers/foreman_puppet/puppet_smart_proxies_controller_test.rb
         | 
| 429 424 | 
             
            - test/controllers/foreman_puppet/hosts_controller_test.rb
         | 
| 430 | 
            -
            - test/controllers/foreman_puppet/api/v2/template_combinations_controller_test.rb
         | 
| 431 | 
            -
            - test/controllers/foreman_puppet/api/v2/smart_class_parameters_controller_test.rb
         | 
| 432 | 
            -
            - test/controllers/foreman_puppet/api/v2/host_classes_controller_test.rb
         | 
| 433 425 | 
             
            - test/controllers/foreman_puppet/api/v2/hostgroups_controller_test.rb
         | 
| 434 | 
            -
            - test/controllers/foreman_puppet/api/v2/lookups_common_controller_test.rb
         | 
| 435 | 
            -
            - test/controllers/foreman_puppet/api/v2/environments_controller_test.rb
         | 
| 436 | 
            -
            - test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb
         | 
| 437 | 
            -
            - test/controllers/foreman_puppet/api/v2/hostgroup_classes_controller_test.rb
         | 
| 438 | 
            -
            - test/controllers/foreman_puppet/api/v2/puppetclasses_controller_test.rb
         | 
| 439 | 
            -
            - test/controllers/foreman_puppet/api/v2/smart_proxies_controller_test.rb
         | 
| 440 426 | 
             
            - test/controllers/foreman_puppet/api/v2/override_values_controller_test.rb
         | 
| 441 427 | 
             
            - test/controllers/foreman_puppet/api/v2/config_groups_controller_test.rb
         | 
| 428 | 
            +
            - test/controllers/foreman_puppet/api/v2/smart_proxies_controller_test.rb
         | 
| 429 | 
            +
            - test/controllers/foreman_puppet/api/v2/environments_controller_test.rb
         | 
| 430 | 
            +
            - test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb
         | 
| 431 | 
            +
            - test/controllers/foreman_puppet/api/v2/lookups_common_controller_test.rb
         | 
| 432 | 
            +
            - test/controllers/foreman_puppet/api/v2/smart_class_parameters_controller_test.rb
         | 
| 442 433 | 
             
            - test/controllers/foreman_puppet/api/v2/provisioning_templates_controller_test.rb
         | 
| 434 | 
            +
            - test/controllers/foreman_puppet/api/v2/template_combinations_controller_test.rb
         | 
| 435 | 
            +
            - test/controllers/foreman_puppet/api/v2/host_classes_controller_test.rb
         | 
| 436 | 
            +
            - test/controllers/foreman_puppet/api/v2/puppetclasses_controller_test.rb
         | 
| 437 | 
            +
            - test/controllers/foreman_puppet/api/v2/hostgroup_classes_controller_test.rb
         | 
| 443 438 | 
             
            - test/controllers/foreman_puppet/puppetclasses_controller_test.rb
         | 
| 444 | 
            -
            - test/controllers/ | 
| 445 | 
            -
            - test/ | 
| 446 | 
            -
            - test/ | 
| 447 | 
            -
            - test/ | 
| 448 | 
            -
            - test/ | 
| 439 | 
            +
            - test/controllers/provisioning_templates_controller_test.rb
         | 
| 440 | 
            +
            - test/integration/foreman_puppet/puppetclass_js_test.rb
         | 
| 441 | 
            +
            - test/integration/foreman_puppet/host_js_test.rb
         | 
| 442 | 
            +
            - test/integration/foreman_puppet/environment_js_test.rb
         | 
| 443 | 
            +
            - test/integration/foreman_puppet/dashboard_js_test.rb
         | 
| 444 | 
            +
            - test/integration/foreman_puppet/smartclass_parameter_js_test.rb
         | 
| 445 | 
            +
            - test/integration/foreman_puppet/hostgroup_js_test.rb
         | 
| 446 | 
            +
            - test/helpers/foreman_puppet/puppetclass_lookup_keys_helper_test.rb
         | 
| 447 | 
            +
            - test/helpers/foreman_puppet/puppetclasses_helper_test.rb
         | 
| 448 | 
            +
            - test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb
         | 
| 449 | 
            +
            - test/integration_puppet_helper.rb
         | 
| 
            File without changes
         |