It creates a folder, the nginx vhost for certbot and HTTP redirects, and also runs certbot and recreates the nginx vhost that includes the TLS cert
		
			
				
	
	
		
			137 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'toml'
 | |
| 
 | |
| provides :parity_node
 | |
| 
 | |
| property :name, String, name_property: true, required: true
 | |
| property :config, Hash, required: true
 | |
| property :password, String, required: true
 | |
| property :rpc_proxy_port, Integer
 | |
| 
 | |
| action :enable do
 | |
|   node_name = name
 | |
|   parity_service = "parity_#{node_name}"
 | |
|   base_path = "#{node['kosmos-parity']['home_path']}/.local/share/io.parity.ethereum/#{node_name}"
 | |
|   config_path = "#{base_path}/config.toml"
 | |
| 
 | |
|   config[:parity][:base_path] = base_path
 | |
|   config[:account] = {}
 | |
|   config[:account][:password] = ["#{base_path}/password"]
 | |
| 
 | |
|   if config[:parity][:chain] == "dev"
 | |
|     config[:parity][:chain] = "#{base_path}/chain-config.json"
 | |
|   end
 | |
| 
 | |
|   directory base_path do
 | |
|     recursive true
 | |
|     owner     "parity"
 | |
|     group     "parity"
 | |
|   end
 | |
| 
 | |
|   %w(chains keys).each do |subfolder|
 | |
|     directory "#{base_path}/#{subfolder}" do
 | |
|       recursive true
 | |
|       owner     "parity"
 | |
|       group     "parity"
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   password_path = "#{base_path}/password"
 | |
| 
 | |
|   file password_path do
 | |
|     content password
 | |
|     owner   "parity"
 | |
|     group   "parity"
 | |
|     mode    0640
 | |
|   end
 | |
| 
 | |
|   ruby_block "generate config" do
 | |
|     block do
 | |
|       parity_args = "--chain #{config[:parity][:chain]} --base-path #{base_path}"
 | |
| 
 | |
|       parity_account_list = Mixlib::ShellOut.new(
 | |
|         "parity account list #{parity_args}",
 | |
|         user: "parity"
 | |
|       )
 | |
|       parity_account_list.run_command
 | |
| 
 | |
|       parity_account = parity_account_list.stdout.strip.gsub(/[(\[|\])]/, '')
 | |
| 
 | |
|       if parity_account.empty?
 | |
|         parity_account_create = Mixlib::ShellOut.new(
 | |
|           "parity account new #{parity_args} --password #{base_path}/password",
 | |
|           user: "parity"
 | |
|         )
 | |
|         parity_account_create.run_command
 | |
| 
 | |
|         parity_account = parity_account_create.stdout.strip
 | |
|       end
 | |
| 
 | |
|       config[:account][:unlock] = [parity_account]
 | |
| 
 | |
|       # Using our own chain config (i.e. dev)
 | |
|       if config[:parity][:chain].include?(".json")
 | |
|         template "#{base_path}/chain-config.json" do
 | |
|           source 'chain-config.json.erb'
 | |
|           variables parity_account: parity_account
 | |
|           owner     "parity"
 | |
|           group     "parity"
 | |
|           mode      0640
 | |
|           notifies :restart, "service[#{parity_service}]", :delayed
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       file "config" do
 | |
|         path      config_path
 | |
|         content   TOML::Generator.new(config).body
 | |
|         owner     "parity"
 | |
|         group     "parity"
 | |
|         mode      0640
 | |
|         notifies :restart, "service[#{parity_service}]", :delayed
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   execute "systemctl daemon-reload" do
 | |
|     command "systemctl daemon-reload"
 | |
|     action :nothing
 | |
|   end
 | |
| 
 | |
|   template "/lib/systemd/system/#{parity_service}.service" do
 | |
|     source "parity.systemd.service.erb"
 | |
|     variables config_file: config_path
 | |
|     notifies :run, "execute[systemctl daemon-reload]", :delayed
 | |
|     notifies :restart, "service[#{parity_service}]", :delayed
 | |
|   end
 | |
| 
 | |
|   service parity_service do
 | |
|     action [:enable, :start]
 | |
|   end
 | |
| 
 | |
|   if rpc_proxy_port
 | |
|     include_recipe "kosmos-nginx"
 | |
| 
 | |
|     hostname = node['kosmos-parity']['hostname']
 | |
| 
 | |
|     template "#{node['nginx']['dir']}/sites-available/#{parity_service}" do
 | |
|       source 'nginx_conf_parity.erb'
 | |
|       owner 'www-data'
 | |
|       mode 0640
 | |
|       variables internal_port: config[:rpc][:port],
 | |
|                 external_port: rpc_proxy_port,
 | |
|                 parity_service: parity_service,
 | |
|                 server_name:   hostname,
 | |
|                 ssl_cert:      "/etc/letsencrypt/live/#{hostname}/fullchain.pem",
 | |
|                 ssl_key:       "/etc/letsencrypt/live/#{hostname}/privkey.pem"
 | |
|       notifies :reload, 'service[nginx]', :delayed
 | |
|     end
 | |
| 
 | |
|     nginx_site parity_service do
 | |
|       action :enable
 | |
|     end
 | |
| 
 | |
|     nginx_certbot_site hostname do
 | |
|       site parity_service
 | |
|     end
 | |
|   end
 | |
| end
 |