160 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import json
 | 
						|
 | 
						|
 | 
						|
assert node.has_bundle('php')
 | 
						|
 | 
						|
version = node.metadata.get('nextcloud/version')
 | 
						|
 | 
						|
directories = {
 | 
						|
    '/opt/nextcloud': {},
 | 
						|
    '/etc/nextcloud': {
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
    },
 | 
						|
    '/var/lib/nextcloud': {
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
        'mode': '770',
 | 
						|
    },
 | 
						|
    '/var/lib/nextcloud/.userapps': {
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
    },
 | 
						|
    '/var/lib/nextcloud/.cache': {
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
    },
 | 
						|
}
 | 
						|
 | 
						|
downloads[f'/tmp/nextcloud-{version}.tar.bz2'] = {
 | 
						|
    'url': f'https://download.nextcloud.com/server/releases/nextcloud-{version}.tar.bz2',
 | 
						|
    'sha256_url': '{url}.sha256',
 | 
						|
    'triggered': True,
 | 
						|
}
 | 
						|
actions['delete_nextcloud'] = {
 | 
						|
    'command': 'rm -rf /opt/nextcloud/*',
 | 
						|
    'triggered': True,
 | 
						|
}
 | 
						|
actions['extract_nextcloud'] = {
 | 
						|
    'command': f'tar xfvj /tmp/nextcloud-{version}.tar.bz2 --strip 1 -C /opt/nextcloud nextcloud',
 | 
						|
    'unless': f"""php -r 'include "/opt/nextcloud/version.php"; echo "$OC_VersionString";' | grep -q '^{version}$'""",
 | 
						|
    'preceded_by': [
 | 
						|
        'action:delete_nextcloud',
 | 
						|
        f'download:/tmp/nextcloud-{version}.tar.bz2',
 | 
						|
    ],
 | 
						|
    'needs': [
 | 
						|
        'directory:/opt/nextcloud',
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
symlinks = {
 | 
						|
    '/opt/nextcloud/config': {
 | 
						|
        'target': '/etc/nextcloud',
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
        'needs': [
 | 
						|
            'action:extract_nextcloud',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/opt/nextcloud/userapps': {
 | 
						|
        'target': '/var/lib/nextcloud/.userapps',
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
        'needs': [
 | 
						|
            'action:extract_nextcloud',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
}
 | 
						|
 | 
						|
files = {
 | 
						|
    '/etc/nextcloud/managed.config.php': {
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
        'mode': '640',
 | 
						|
        'needs': [
 | 
						|
            'directory:/etc/nextcloud',
 | 
						|
        ],
 | 
						|
    },
 | 
						|
    '/etc/nextcloud/managed.config.json': {
 | 
						|
        'content': json.dumps(node.metadata.get('nextcloud/config'), indent=4, sort_keys=True),
 | 
						|
        'owner': 'www-data',
 | 
						|
        'group': 'www-data',
 | 
						|
        'mode': '640',
 | 
						|
        'needs': [
 | 
						|
            'directory:/etc/nextcloud',
 | 
						|
        ],
 | 
						|
    },}
 | 
						|
 | 
						|
# SETUP
 | 
						|
 | 
						|
actions['install_nextcloud'] = {
 | 
						|
    'command': repo.libs.nextcloud.occ(
 | 
						|
        'maintenance:install',
 | 
						|
        no_interaction=None,
 | 
						|
        database='pgsql',
 | 
						|
        database_name='nextcloud',
 | 
						|
        database_host='localhost',
 | 
						|
        database_user='nextcloud',
 | 
						|
        database_pass=node.metadata.get('postgresql/roles/nextcloud/password'),
 | 
						|
        admin_user='admin',
 | 
						|
        admin_pass=node.metadata.get('nextcloud/admin_pass'),
 | 
						|
        data_dir='/var/lib/nextcloud',
 | 
						|
    ),
 | 
						|
    'unless': repo.libs.nextcloud.occ('status') + ' | grep -q "installed: true"',
 | 
						|
    'needs': [
 | 
						|
        'directory:/etc/nextcloud',
 | 
						|
        'directory:/opt/nextcloud',
 | 
						|
        'directory:/var/lib/nextcloud',
 | 
						|
        'directory:/var/lib/nextcloud/.userapps',
 | 
						|
        'directory:/var/lib/nextcloud/.cache',
 | 
						|
        'symlink:/opt/nextcloud/config',
 | 
						|
        'symlink:/opt/nextcloud/userapps',
 | 
						|
        'action:extract_nextcloud',
 | 
						|
        'file:/etc/nextcloud/managed.config.php',
 | 
						|
        'postgres_db:nextcloud',
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
# UPGRADE
 | 
						|
 | 
						|
files['/opt/nextcloud_upgrade_status.php'] = {
 | 
						|
    'source': 'upgrade_status.php',
 | 
						|
    'owner': 'www-data',
 | 
						|
    'group': 'www-data',
 | 
						|
    'mode': '640',
 | 
						|
    'needs': [
 | 
						|
        'action:extract_nextcloud',
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
actions['upgrade_nextcloud'] = {
 | 
						|
    'command': repo.libs.nextcloud.occ('upgrade'),
 | 
						|
    'unless': 'sudo -u www-data php /opt/nextcloud_upgrade_status.php; test $? -ne 99',
 | 
						|
    'needs': [
 | 
						|
        'file:/opt/nextcloud_upgrade_status.php',
 | 
						|
        'action:install_nextcloud',
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
actions['nextcloud_add_missing_inidces'] = {
 | 
						|
    'command': repo.libs.nextcloud.occ('db:add-missing-indices'),
 | 
						|
    'needs': [
 | 
						|
        'action:upgrade_nextcloud',
 | 
						|
    ],
 | 
						|
    'triggered': True,
 | 
						|
    'triggered_by': [
 | 
						|
        f'action:extract_nextcloud',
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
# RESCAN
 | 
						|
 | 
						|
files['/opt/nextcloud_rescan'] = {
 | 
						|
    'source': 'rescan',
 | 
						|
    'owner': 'www-data',
 | 
						|
    'group': 'www-data',
 | 
						|
    'mode': '550',
 | 
						|
    'needs': [
 | 
						|
        'action:extract_nextcloud',
 | 
						|
    ],
 | 
						|
}
 |