mirror of https://github.com/docker/docs.git
				
				
				
			Fixes #2595 `dm rm` fails when config.json is not found
This issue occurs when `api.Load()` fails while loading the `config.json` file, in case the config file is not present. Refactored the code to handled `-y` and `-f` as documented. Now added UT for remove options. Signed-off-by: Anil Belur <askb23@gmail.com>
This commit is contained in:
		
							parent
							
								
									32795c9d1f
								
							
						
					
					
						commit
						403b57437f
					
				| 
						 | 
				
			
			@ -17,9 +17,13 @@ func cmdRm(c CommandLine, api libmachine.API) error {
 | 
			
		|||
	confirm := c.Bool("y")
 | 
			
		||||
 | 
			
		||||
	for _, hostName := range c.Args() {
 | 
			
		||||
		h, err := api.Load(hostName)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return fmt.Errorf("Error removing host %q: %s", hostName, err)
 | 
			
		||||
		h, loaderr := api.Load(hostName)
 | 
			
		||||
		if loaderr != nil {
 | 
			
		||||
			// On --force, continue to remove on-disk files/dir
 | 
			
		||||
			if !force {
 | 
			
		||||
				return fmt.Errorf("Error removing host %q: %s", hostName, loaderr)
 | 
			
		||||
			}
 | 
			
		||||
			log.Errorf("Error removing host %q: %s. Continuing on `-f`, host instance may by running", hostName, loaderr)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if !confirm && !force {
 | 
			
		||||
| 
						 | 
				
			
			@ -29,10 +33,12 @@ func cmdRm(c CommandLine, api libmachine.API) error {
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err := h.Driver.Remove(); err != nil {
 | 
			
		||||
			if !force {
 | 
			
		||||
				log.Errorf("Provider error removing machine %q: %s", hostName, err)
 | 
			
		||||
				continue
 | 
			
		||||
		if loaderr == nil {
 | 
			
		||||
			if err := h.Driver.Remove(); err != nil {
 | 
			
		||||
				if !force {
 | 
			
		||||
					log.Errorf("Provider error removing machine %q: %s", hostName, err)
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,3 +53,87 @@ func TestCmdRm(t *testing.T) {
 | 
			
		|||
	assert.False(t, libmachinetest.Exists(api, "machineToRemove2"))
 | 
			
		||||
	assert.True(t, libmachinetest.Exists(api, "machine"))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCmdRmforcefully(t *testing.T) {
 | 
			
		||||
	commandLine := &commandstest.FakeCommandLine{
 | 
			
		||||
		CliArgs: []string{"machineToRemove1", "machineToRemove2"},
 | 
			
		||||
		LocalFlags: &commandstest.FakeFlagger{
 | 
			
		||||
			Data: map[string]interface{}{
 | 
			
		||||
				"force": true,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	api := &libmachinetest.FakeAPI{
 | 
			
		||||
		Hosts: []*host.Host{
 | 
			
		||||
			{
 | 
			
		||||
				Name:   "machineToRemove1",
 | 
			
		||||
				Driver: &fakedriver.Driver{},
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				Name:   "machineToRemove2",
 | 
			
		||||
				Driver: &fakedriver.Driver{},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := cmdRm(commandLine, api)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	assert.False(t, libmachinetest.Exists(api, "machineToRemove1"))
 | 
			
		||||
	assert.False(t, libmachinetest.Exists(api, "machineToRemove2"))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCmdRmforceDoesAutoConfirm(t *testing.T) {
 | 
			
		||||
	commandLine := &commandstest.FakeCommandLine{
 | 
			
		||||
		CliArgs: []string{"machineToRemove1", "machineToRemove2"},
 | 
			
		||||
		LocalFlags: &commandstest.FakeFlagger{
 | 
			
		||||
			Data: map[string]interface{}{
 | 
			
		||||
				"y":     false,
 | 
			
		||||
				"force": true,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	api := &libmachinetest.FakeAPI{
 | 
			
		||||
		Hosts: []*host.Host{
 | 
			
		||||
			{
 | 
			
		||||
				Name:   "machineToRemove1",
 | 
			
		||||
				Driver: &fakedriver.Driver{},
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				Name:   "machineToRemove2",
 | 
			
		||||
				Driver: &fakedriver.Driver{},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := cmdRm(commandLine, api)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	assert.False(t, libmachinetest.Exists(api, "machineToRemove1"))
 | 
			
		||||
	assert.False(t, libmachinetest.Exists(api, "machineToRemove2"))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCmdRmforceConfirmUnset(t *testing.T) {
 | 
			
		||||
	commandLine := &commandstest.FakeCommandLine{
 | 
			
		||||
		CliArgs: []string{"machineToRemove1"},
 | 
			
		||||
		LocalFlags: &commandstest.FakeFlagger{
 | 
			
		||||
			Data: map[string]interface{}{
 | 
			
		||||
				"y":     false,
 | 
			
		||||
				"force": false,
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	api := &libmachinetest.FakeAPI{
 | 
			
		||||
		Hosts: []*host.Host{
 | 
			
		||||
			{
 | 
			
		||||
				Name:   "machineToRemove1",
 | 
			
		||||
				Driver: &fakedriver.Driver{},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := cmdRm(commandLine, api)
 | 
			
		||||
	assert.EqualError(t, err, "EOF")
 | 
			
		||||
 | 
			
		||||
	assert.True(t, libmachinetest.Exists(api, "machineToRemove1"))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue