[rudder-dev] Having correct FQDN in (first) inventory

Jonathan Clarke jonathan.clarke at normation.com
Mon May 2 18:29:01 CEST 2016


Hi,

On 04/13/2016 11:48 AM, Francois wrote:
> On 13/04/2016 09:49, Nicolas Charles wrote:
>> Hello Francois,
>>
>> Thank you for the nice sum-up. My answers in the text

+1

>> Le 07/04/2016 15:33, Francois Armand a écrit :
>>> On 07/04/2016 15:08, Vincent Membré wrote:
>>>> Le 31/03/2016 12:37, Francois Armand a écrit :
>>>>> Hello,
>>>>>
>>>>> So, here goes for a summary of 
>>>>> http://www.rudder-project.org/redmine/issues/8022, "Node's 
>>>>> FQDN-Resolution is sometimes invalid" and related tickets.
>>>>> The problem cover up several sub-cases, which need to be addressed 
>>>>> systematically to achieve some result.
>>>>> They are:
>>>>>
>>>>>   * 1/ the node FQDN is used for identifying a node, and then
>>>>>     manage authentication and authorization to access its
>>>>>     promises. If Rudder server, CFEngine promise server, and the
>>>>>     node don't agree on it, the node can't get its promises. This
>>>>>     is a hard problem because:
>>>>>       o FQDN is fragile. It needs a perfectly up to date and
>>>>>         shared DNS environment. But "it's always a DNS problem",
>>>>>         what gives an idea.
>>>>>       o FQDN tools are notoriously broken, and don't always agree
>>>>>         about what is the FQDN of a host
>>>>>       o even in a perfectly working and up-to-date DNS env, there
>>>>>         may have voluntary decision not to have the same FQDN from
>>>>>         the host and the server, as explained in #8022 ticket.
>>>>>   * 2/ if the node FQDN is not correct in the first sent
>>>>>     inventory, the node configuration is delayed by one day,
>>>>>     because from the node point of view, the inventory was
>>>>>     correctly sent and so the standard frequency for sending
>>>>>     inventories is applied.
>>>>>
>>>>>
>>>>> The long-term solution for 1/ is to use something else that FQDN 
>>>>> to identify the node - we have for example an UUID for that. The 
>>>>> problem here is that it is a hard limitation of the protocol used 
>>>>> by cf-serverd. So to use another identification scheme (and why 
>>>>> not our own authentication/authorization), we need to either patch 
>>>>> cf-serverd or use a different client-server protocol for promises 
>>>>> transfer. Both solutions are open, but are out of scope.

Actually, it is already possible to do authorizations in cf-serverd 
based on the key hash of connecting agents: 
https://docs.cfengine.com/docs/3.7/reference-promise-types-access.html#admit_keys. 
This has been possible since CFEngine 3.6 (so works on Rudder 2.11+ agents).

We could pretty easily implement this, since we already have an 
inventory with nodes CFEngine keys in. It could be opt-in as a start, 
while we ensure it's reliable (as in "more reliable that hostnames"). WDYT?

>>>>> Meanwhile, we can address at best 1/ and 2/
>>>>>
>>>>> *For 1/, *we need to prevent as much as we can to give bad FQDN 
>>>>> and in all case, give the user a possibility to hook what he knows 
>>>>> should be the correct value.
>>>>> *- Prevent more bad FQDN:**
>>>>> *=> update perl version: 
>>>>> http://www.rudder-project.org/redmine/issues/8123
>>>>> I didn't find anything else on that subject, compared to what we 
>>>>> are doing now.
>>>>>
>>>>> *- Let the user hook the correct value: **
>>>>> *=> http://www.rudder-project.org/redmine/issues/8022#note-20
>>>>> Here, we still need to specify the path convention for command and 
>>>>> file to look for the correct FDQN.
>>>> I have some remarks/questions here:
>>>>
>>>> * If I understand correctly the process will be: Inventory is ran 
>>>> on the Node, then inventory is modified to add data from commands / 
>>>> file ? or will this be used when runnig fusionInventory ?
>>>
>>> The idea is to patch fusion inventory plugin for Rudder to use that 
>>> logic.
>> There are already a way to extend inventories:
>> http://fusioninventory.org/documentation/agent/additional_content.html
>> I think it will be much easier and future proof to use the 
>> FusionInventory way rather than reimplementing it ourselves
>>
>> We could use this principle to create our own task that would read 
>> data or run external script - but maybe that's what you were implying ?
>
> No, I meant that we should evolve the logic to fill 
> <RUDDER><HOSTNAME>, contribute the evolution to rudder plugin, and 
> patch our own until then.
> I'm not about using the what you linked to for that, it's really not 
> an extension, but the actual "business" logic we want to implement for 
> Rudder <HOSTNAME>.
>
> On the other hand, what you propose seems really nice for 4670, I 
> updated the ticket accordingly.
>
>>>> * In Which entry will they be stored ? RUDDER/HOSTAME? another one
>>>
>>> Yes, RUDDER/HOSTNAME
>>>
>>>> * Do we want to define Hostname only ? Would it not be better if 
>>>> the solution was much more adaptable and can modify any entry from 
>>>> the inventory ?
>>>
>>> It's an other ticket, #4670, linked in #8022. HOSTNAME (FQDN, 
>>> really) is different from the general use case (at least adding 
>>> information into inventory) because of the special importance of 
>>> FQDN in CFengine server/agent identification protocol. So it is kind 
>>> of ok to see #8022 as a bug in the existing versions, and #4670 (or 
>>> an extension of it) as a new feature going to next versions.
>> Yes, let start with HOSTNAME in released version
>>>
>>>>
>>>>
>>>> About the path, I suggest we should put them under 
>>>> /var/rudder/inventories :
>>>>
>>>>   * If we modify only hostname (RUDDER/HOSTNAME):
>>>>       o /var/rudder/inventories/hostname-command: Command to
>>>>         execute the get the correct hostname
>>>>       o /var/rudder/inventories/hostname-file: File containing the
>>>>         path the file containing the correct hostname
>>>>
>>>
>>> No specific feeling on that... Any idea, other ?
>> I'm not sure it should be in /var - if these are scripts to run to 
>> get data, or data user should put, I feel they would live in other 
>> folder.

It is pretty unusual to configure anything in /var. The right place for 
configs is /etc. (yes, policy_server.dat is a nasty exception to this 
rule). How about /opt/rudder/etc/hooks/inventory.d/ ? This would be a 
good start to having extensible inventory.

(and yes, it would be desirable to have configs in /etc, without the 
/opt/rudder prefix, but we're talking about a bug fix in existing 
versions here, so that it clearly out of scope)

>> Plus, if we want user to preseed the system with these scripts/data, 
>> before installing agent, /var/rudder will not exist

This is irrelevant, I think. If you need to install a file in a 
directory, it's pretty easy to create - in fact, just good practice.

>>>>> *For 2/, *we need to prevent the sending of inventory that will be 
>>>>> rejected by the server for sure. *
>>>>> *=> http://www.rudder-project.org/redmine/issues/8127

FYI, Benoît is working on this this week. We will implement simple 
checks on the most important fields using a Perl script (since the 
inventory is already run in Perl, we know it's available).

Jon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.rudder-project.org/pipermail/rudder-dev/attachments/20160502/00229807/attachment.html>


More information about the rudder-dev mailing list