Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

replacing a file with a symbolic link in a salt state

Tags:

salt-stack

I'm new to salt-stack.

I'm trying to make sure a symbolic link exists.

/etc/localtime:
  file.symlink:
    - target: /usr/share/zoneinfo/Europe/Paris
    - file.exists:
      - name: /usr/share/zoneinfo/Europe/Paris

The result is as excepted when there's no existing /etc/localtime, or when /etc/localtime is already a symlink. But it fails when /etc/localtime is a regular file :

----------
State: - file
Name:      /etc/localtime
Function:  symlink
    Result:    False
    Comment:   File exists where the symlink /etc/localtime should be
    Changes:   

I can't figure how to code the state so the file is deleted before the link creation. Any clue ?

Cheers, Pierre

like image 298
Pierre Avatar asked Dec 23 '13 18:12

Pierre


1 Answers

Use force=True

/etc/locatime:
  file.symlink:
    - target: /usr/share/zoneinfo/Europe/Paris
    - force: True
    # Note: file.exists is not valid here and can be removed
    # file.exists:
    #  - name: /usr/share/zoneinfo/Europe/Paris

From the documentation:

If the target of the symlink exists and is not a symlink and force is set to False, the state will fail. If force is set to True, the file or directory in the way of the symlink file will be deleted to make room for the symlink, unless backupname is set, when it will be renamed

like image 129
Dan Garthwaite Avatar answered Sep 28 '22 06:09

Dan Garthwaite